python - celery 任务中的grpc超时

标签 python celery grpc

我正在尝试在 celery 任务中连接到 GRPC 服务器。我有以下一段代码

    timeout = 1
    host = '0.tcp.ngrok.io'
    port = '7145'
    channel = grpc.insecure_channel('{0}:{1}'.format(host, port))
    try:
        grpc.channel_ready_future(channel).result(timeout=timeout)
    except grpc.FutureTimeoutError:
        sys.exit(1)
    stub = stub(channel)

当我通过 Python shell 运行此代码段时,我能够建立连接并执行 GRPC 方法。但是,当我通过 Celery 任务运行它时,我得到了 grpc.FutureTimeoutError,并且没有建立连接。

Celery worker 与 grpc 服务器位于同一台机器上。我尝试使用 socket 库来 ping GRPC 服务器,并且成功了(它返回了一些垃圾响应)。

我使用的是 Python 2.7,安装了 grpcio==1.6.0。 celery 版本是 4.1.0。任何指示都会有所帮助。

最佳答案

我相信 Celery 在底层使用了 fork,而 gRPC 1.6 不支持任何 fork 行为。

尝试更新到 gRPC 1.7。

关于python - celery 任务中的grpc超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47188219/

相关文章:

python - 如何使用 Python (pandas) 打开 SQL Server .mdf 文件

python - 为什么 elif 在 if 语句之前运行? Python

python - 当其中的任务失败时,将 Celery 链自动移动到死信队列

django - 将 Celery 任务日志直接保存到单个文件

unit-testing - 在 celery 任务中模拟调用

grpc - Google Cloud Bigtable : repeated grpc error code 13, 然后突然成功

python - 如何从 Python 中的任何应用程序捕获剪贴板事件(等效于 onChangeClipboard)

Docker:如何从给定容器访问另一个容器中的文件?

c++ - 使用 C++ 的 Google Cloud 语音 API,第一步是什么?

python - 修复在python中使用environb的导入错误