Python Docker&x2B;pubsub&x2B;子进程挂起,没有错误

Python Docker&x2B;pubsub&x2B;子进程挂起,没有错误,python,docker,grpc,publish-subscribe,google-cloud-pubsub,Python,Docker,Grpc,Publish Subscribe,Google Cloud Pubsub,我在docker容器中运行pubsub,几分钟后遇到挂起。我在docker之外使用类似的命令运行了pubsub,没有发现挂起(运行了一年多) 我能够通过下面概述的简化实现重现我的问题 以下四个文件(docker文件、requirements.txt、worker.py、test.py)放置在同一目录中。它们位于本要点中。基本上,worker.py正在调用一个子流程函数,该函数调用test.py来运行time.sleep(3) 为了构建docker文件,我将Dockerfile、requirem

我在docker容器中运行pubsub,几分钟后遇到挂起。我在docker之外使用类似的命令运行了pubsub,没有发现挂起(运行了一年多)

我能够通过下面概述的简化实现重现我的问题

以下四个文件(docker文件、requirements.txt、worker.py、test.py)放置在同一目录中。它们位于本要点中。基本上,worker.py正在调用一个子流程函数,该函数调用test.py来运行time.sleep(3)

为了构建docker文件,我将Dockerfile、requirements.txt、worker.py和test.py放入一个目录并运行:

docker build --tag=test .
要运行docker文件,我执行了以下操作:

docker run -it \
   -e GOOGLE_APPLICATION_CREDENTIALS=/keys/service-account.json \
   -e GRPC_ENABLE_FORK_SUPPORT=false \
   -e GRPC_VERBOSITY=debug \
   -e GRPC_TRACE=all \
   -v /tmp/keys/:/keys/:ro \
   -v /tmp/logs:/logs \
test:latest bash
文件service-account.json保存我的pubsub密钥

我在Mac电脑上运行docker,但我在kubernetes和运行docker的Ubuntu18.04机器上也经历过同样的挂起。问题是,几分钟后,pubsub订户变得没有响应。上述代码在没有docker的虚拟环境中完美运行

文件(在gist中)publish_output.txt是我的pubsub publisher输出的日志文件,并包含消息ID

文件subscriber_output.txt(在gist中)是订阅者日志输出。我将GRPC_TRACE设置为all,将GRPC_VERBOSITY设置为debug。 最后成功接收的消息是消息ID 1253690400552289(subscriber_output.txt的第9338行)。pubsub未收到1253713007710668、1253714609061509、1253713464329969及以上消息

我还需要做其他设置吗?不幸的是,我正在从Python中运行自定义C++代码,所以我需要使用子进程。 我的docker配置中的当前python包:

CacheControl             0.12.6
cachetools               4.1.0
certifi                  2020.4.5.1
chardet                  3.0.4
firebase                 3.0.1
firebase-admin           4.3.0
firestore                0.0.8
google-api-core          1.18.0
google-api-python-client 1.9.1
google-auth              1.16.1
google-auth-httplib2     0.0.3
google-cloud-core        1.3.0
google-cloud-firestore   1.7.0
google-cloud-logging     1.15.0
google-cloud-pubsub      1.5.0
google-cloud-storage     1.28.1
google-resumable-media   0.5.1
googleapis-common-protos 1.52.0
grpc-google-iam-v1       0.12.3
grpcio                   1.29.0
httplib2                 0.18.1
idna                     2.9
iso8601                  0.1.12
msgpack                  1.0.0
pip                      20.1.1
protobuf                 3.12.2
pyasn1                   0.4.8
pyasn1-modules           0.2.8
pytz                     2020.1
requests                 2.23.0
rsa                      4.0
setuptools               46.4.0
six                      1.15.0
uritemplate              3.0.1
urllib3                  1.25.9
wheel                    0.34.2
感谢您的帮助


谢谢

问题似乎出在谷歌核心api上

我通过以下建议解决了这个问题:

requirements.txt基本上应使用以下版本:

google-api-python-client <= 1.8.4
google-api-core <= 1.16.0
googleapi python客户端