zeromq 和 bind_to_random_port - 如何选择端口

标签 zeromq pyzmq

在python中,我使用以下内容:

    context = zmq.Context()
    socket = context.socket(zmq.PUSH)
    socket.bind_to_random_port('tcp://*', min_port=6001, max_port=6004, max_tries=100)
    port_selected = socket.???????

我怎么知道选择了哪个端口?我将在 redis 中有一个查找表供 worker 阅读。

我正在使用推拉模型。我需要让工作人员知道要连接到哪些端口。

我必须这样做,因为我在 uwsgi 中使用了 gevent 循环并指定了一个简单的盲区和错误,因为 fork 。如果使用 bind_to_random_port 然后选择一个端口,我只是不知道是哪个。
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gevent-1.0b2-py2.7-linux-x86_64.egg/gevent/greenlet.py",
line 328, in run
    result = self._run(*self.args, **self.kwargs)
  File "/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbUwsgiPixelServer/uwsgiPixelServer.py",
line 43, in sendthis
    socket.send(push)
  File "/usr/local/lib/python2.7/dist-packages/zmq/green/core.py",
line 173, in send
    self._wait_write()
  File "/usr/local/lib/python2.7/dist-packages/zmq/green/core.py",
line 108, in _wait_write
    assert self.__writable.ready(), "Only one greenlet can be waiting
on this event"
AssertionError: Only one greenlet can be waiting on this event
<Greenlet at 0x2d41370: sendthis('2012-07-02 04:05:15')> failed with
AssertionError

最佳答案

port_selected = socket.bind_to_random_port('tcp://*', min_port=6001, max_port=6004, max_tries=100)

关于zeromq 和 bind_to_random_port - 如何选择端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11341795/

相关文章:

java - JZMQ错误: no thread available

ZeroMQ (clrzmq4) 轮询问题

即使安装了 pyzmq,Python 也无法导入 zmq

c# - 在 C# UWP 中使用 PublisherSocket 发布消息未在 python 中收到

ZeroMQ:多个套接字的相同上下文

multithreading - ZeroMQ 和多线程

zeromq DEALER 客户端到多个服务器 (ROUTER)

python - Jupyter notebook python 在 Windows 10 上崩溃

python - 如何将 send_json 与 pyzmq PUB SUB 一起使用

python - ZeroMQ 在套接字绑定(bind)到 ipc ://protocol address (python) 时抛出 ZMQError