2012-07-05 14 views
7

seçilmiş olsun, ben kullanıyorum şu:zeromq ve bind_to_random_port - nasıl liman python'da

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.??????? 

nasıl seçilir hangi bağlantı noktasını biliyoruz? İşçilerin okuması için redis tablosuna bakacağım.

Bir itme çekme modelini kullanıyorum. Çalışanların hangi bağlantı noktalarına bağlanacağını bilmelerine izin vermeliyim.

Bunu yapmak zorundayım çünkü uwsgi'deki gevent döngüyü kullanıyorum ve düz bir kör thows ve bir çatal hatası hatası belirtiyorum. Bir bind_to_random_port kullanın ve sonra bir port seçilirse, hangisi olduğunu bilmiyorum.

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 

cevap

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

referans: http://zeromq.github.com/pyzmq/api/zmq.html#zmq.Socket.bind_to_random_port – odigity

İlgili konular