0

django を使用して、別の別の Python プログラムにメッセージを送信する必要があります。Zeromq は軽量のようで、これに適しているはずです。

ただし、それを機能させようとすると、ソケットを zmq.PUSH (またはその他のもの) に設定すると、常に ZeroMQ: Bad Address エラーが発生します。これはトレースバックです:

Exception Type:     ZMQError
Exception Value:    Bad address
...
...
sock = context.socket(zmq.PUSH)
/usr/local/lib/python2.7/dist-packages/zmq/sugar/context.py in socket
s = self._socket_class(self, socket_type)
self <zmq.sugar.context.Context object at 0x200dc80>
socket_type 8

コンテキストは、models.py の呼び出し関数で作成され、次のように実行されます。

context = zmq.Context()
sock = context.socket(zmq.PUSH)
< ^ crash here>
sock.bind('tcp://127.0.0.1:8921')
...

経由で起動されます

exec uwsgi_python \
    --master --pidfile=/tmp/blah.pid \
    --chdir=/path/to/site \
    --module=program.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=program.settings \
    --uid user --gid 1000 \
    --socket=/tmp/uwsgi_program.sock \
    --chmod-socket \
    --vacuum \
    --harakiri=20 \
    --processes=2 \
    --max-requests=5000 \
    --die-on-term

また、 --lazy を起動スクリプトに追加しようとしましたが、同じエラーで役に立ちませんでした。

wsgi.py ファイルには

import django.core.handlers.wsgi
from raven.contrib.django.middleware.wsgi import Sentry
application = Sentry(django.core.handlers.wsgi.WSGIHandler())

もちろん、すべてが runserver または uWSGI を使用していない別のサーバーで正常に動作します。

そのため、それが作成する zeromq コンテキストが何らかの理由で無効になっているようです。wsgi.py ファイルを変更してそこに zeromq コンテキストを生成しようとしても、@postfork を使用してもこの問題は解決しません。まったく同じエラーです。ただし、@postfork を使用するのも好きではありません。これは、uWSGI を使用するか他のものを使用するかによって、別のコードパスが必要になるためです。可能であれば、これをよりクリーンに行います。

私は何を見落としていますか?

4

3 に答える 3

0

Ubuntu 13.10 リポジトリの uWSGI 1.9.13 でもこのような問題がありました。しかし、localy ビルド 1.9.19 は正常に動作します。

于 2013-11-11T07:58:41.883 に答える
0

さまざまなオプションをすべて試しましたが、最終的に python uwsgi オプションがセットアップに最適であると判断しました。インストールの手順は、次のサイトにあります。

于 2013-11-25T13:46:52.993 に答える