2012-07-05 14 views
7

Trong python, tôi đang sử dụng như sau:zeromq và bind_to_random_port - làm thế nào để có được cổng chọn

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

Làm thế nào để biết những gì cổng được chọn? Tôi sẽ có một bảng tra cứu trong redis cho các công nhân để đọc.

Tôi đang sử dụng mô hình kéo đẩy. Tôi cần phải cho nhân viên biết cổng nào để kết nối.

Tôi phải làm điều này bởi vì tôi đang sử dụng vòng lặp gevent trong uwsgi và chỉ định một luồng mù thuần túy và lỗi do một ngã ba. Nếu sử dụng bind_to_random_port thì một cổng được chọn, tôi chỉ không biết cái nào.

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 

Trả lời

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

tham khảo: http://zeromq.github.com/pyzmq/api/zmq.html#zmq.Socket.bind_to_random_port – odigity

Các vấn đề liên quan