ZMQ在aiohttp Web服务中“随机”崩溃

时间:2016-12-12 21:24:30

标签: docker kubernetes zeromq pyzmq aiohttp

我们有一个基于aiohttp的网络服务,它使用ZMQ向工作人员发送工作并等待结果。我们当然使用 ZMQ eventloop ,因此我们可以等待 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集群中,因此更频繁地发生。有谁知道,上面的堆栈跟踪可能是什么来源?

1 个答案:

答案 0 :(得分:1)

aiohttp不适用于香草pyzmq。 请改用aiozmq无环流。

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