2012-07-05 44 views
7

在Python中,我使用了以下内容:zeromq和bind_to_random_port - 如何让端口选择

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为工人阅读。

我使用的是推拉模型。我需要让工作人员知道要连接的端口。

我必须这样做,因为我使用uwsgi的GEVENT循环并指定一个普通盲thows和错误监守叉子。如果使用bind_to_random_port那么端口seleced,我只是不知道哪个。

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 

回答

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

参考:http://zeromq.github.com/pyzmq/api/zmq.html#zmq.Socket.bind_to_random_port – odigity 2013-03-26 13:43:12