Tag: pyzmq

如果在Docker中运行,ZeroMQ REQ .recv()挂起的消息大于〜1kB

我正在使用REQ / ROUTER套接字来开发一个相对简单的基于Python / ZeroMQ的工作分配系统。 该系统是分布式的,工作人员节点分布在不同的大陆上。 ROUTER负责分配工作, .bind() ROUTER套接字。 通过使用REQ套接字的TCP工作者.connect() 。 在build立一个新的工作节点的过程中,我注意到虽然较小的消息(高达1kB)没有问题,但是由ROUTER发送的〜2kB以上的回复永远不会被工作人员接收进入他们的REQ -socket – 当我调用recv() ,套接字只是挂起。 工作者代码在Docker容器内部运行,当我运行同样的镜像时,我能够解决这个问题–net=host – 如果Docker使用主机networking,似乎不会发生这种情况。 我想知道这是否是在主机或Docker的networking堆栈configuration中的东西,或者是可以防止在我的代码中的东西? 这里是我的代码的简化版本,再现了这个问题: 工人 import sys import zmq import logging import time READY = 'R' def worker(connect_to): ctx = zmq.Context() socket = ctx.socket(zmq.REQ) socket.connect(connect_to) log = logging.getLogger(__name__) while True: socket.send_string(READY) log.debug("Send READY message, waiting for reply") message […]

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

我们有一个基于aiohttp的web服务,它使用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 […]

如何检查是否在Docker中安装了python软件包?

我用Dockerfile成功构build了一个容器。 但是,我的代码不能在容器中工作。 它工作,如果我手动安装所有的软件包。 我假设我搞砸了,导致docker没有正确安装包的东西。 所以,我想检查是否在Docker容器中安装了python包。 什么是检查它的最好方法? 我使用的Dockerfile: # Update the sources list RUN sudo apt-get update # Install basic applications RUN sudo apt-get install -y tar git curl nano wget dialog net-tools build-essential # First install ZeroMQ RUN sudo apt-get install -y libzmq-dev # Install libevent RUN sudo apt-get install -y libevent-dev # Install Python […]

docker集装箱通信

我正在努力实现以下目标: 有多个docker容器执行一些时期的任务 有一个组件在本地主机上运行,​​除了其他任务pipe理(启动/停止)的容器 有时在容器中运行的服务需要发布结果。 因此它们使用ZMQ绑定到一个暴露的端口并发送结果。 运行在本地主机上的组件订阅特定的端口并在其上侦听。 问题是每个容器都需要localhostnetworking上的特定/不同的端口来绑定和发布结果。 这意味着我需要听所有的集装箱港口。 是否有可能听一个单一的端口,所有的容器在那里发布他们的工作? 如果不是,那么选项是什么? 谢谢