docker - ZMQ在aiohttp Web服务中使 “randomly”崩溃

标签 docker kubernetes zeromq pyzmq aiohttp

我们有一个基于aiohttp的Web服务,该服务使用ZMQ将作业发送给工作人员并等待结果。当然,我们正在使用ZMQ事件循环,因此我们可以等待ZMQ套接字。 “有时”进程崩溃,我们得到了这个堆栈跟踪:

...
await socket.send(z, flags=flags)
File "/usr/local/lib/python3.5/dist-packages/zmq/eventloop/future.py", line 165, in send
kwargs=dict(flags=flags, copy=copy, track=track),
File "/usr/local/lib/python3.5/dist-packages/zmq/eventloop/future.py", line 276, in _add_send_event
timeout_ms = self._shadow_sock.sndtimeo
File "/usr/local/lib/python3.5/dist-packages/zmq/sugar/attrsettr.py", line 45, in _getattr_
return self._get_attr_opt(upper_key, opt)
File "/usr/local/lib/python3.5/dist-packages/zmq/sugar/attrsettr.py", line 49, in _get_attr_opt
return self.get(opt)
File "zmq/backend/cython/socket.pyx", line 449, in zmq.backend.cython.socket.Socket.get (zmq/backend/cython/socket.c:4920)
File "zmq/backend/cython/socket.pyx", line 221, in zmq.backend.cython.socket._getsockopt (zmq/backend/cython/socket.c:2860)

“有时候”的意思是,如果我只是在测试机上运行代码,代码就可以正常工作。在使用docker容器的极少数情况下,我们遇到了该问题,但从未能够以可靠的方式重现它。由于我们将容器移动到Kubernetes集群中,因此发生的频率更高。有人知道,上述堆栈跟踪的来源是什么?

最佳答案

aiohttp不能与 Vanilla pyzmq一起使用。
请使用aiozmq无环流。

另请参见https://github.com/zeromq/pyzmq/issues/894https://github.com/aio-libs/aiozmq/blob/master/README.rst

关于docker - ZMQ在aiohttp Web服务中使 “randomly”崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41109833/

相关文章:

docker - 我可以将 ECS 配置为自动从我的 EC2 实例中清除旧容器 [图像] 吗?

dns - Kubernetes无法解析节点服务

kubernetes - 如何在 Kubernetes 中很好地编辑 Secret?

ubuntu - 在 GitHub Actions Ubuntu runners 上安装 libzmq3-dev 时遇到问题

docker - Docker-Machine不适用于Google Cloud服务帐户

node.js - 如何将 sqlite3 与 docker compose 一起使用

C++ protobuf,ZMQ。客户端-服务器接口(interface)的功能

node.js 回调被多次调用

java - 如何在宿主机中使用docker-build库bin

kubernetes - 使用新的 PersistentVolume 重新创建由 StatefulSet 管理的 Pod