11

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 に用意します。

プッシュプルモデルを使用しています。どのポートに接続するかをワーカーに知らせる必要があります。

これを行う必要があるのは、uwsgi で gevent ループを使用していて、単純なブラインド スローとフォークによるエラーを指定しているためです。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
4

1 に答える 1

18
port_selected = socket.bind_to_random_port('tcp://*', min_port=6001, max_port=6004, max_tries=100)
于 2012-07-05T18:03:51.207 に答える