ZeroMQ + Django的&uwsgi问题(ZeroMQ + Django & uwsgi i

2019-10-18 01:14发布

使用Django,我们需要将消息发送到另一个独立的Python程序。 Zeromq似乎是重量轻,应该适合这份法案。

然而,试图得到它的工作,它总是以ZeroMQ结束:错误地址错误,设置插座zmq.PUSH(或任何其他)时。 这是回溯:

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,因为这将需要单独codepaths取决于如果我们使用uWSGI或别的东西,和而做到这一点更干净,如果可能的话。

我是什么俯瞰?

Answer 1:

你已经尝试了所有的办法权(@postfork,--lazy-应用,--lazy ...),所以,除非您使用的是真的过时uWSGI版本我只能猜想(因为我看到在zmq.sugar包装地方),您需要在uWSGI选项--enable-线程(但它是第一次看到它)。

出现该问题的原因ZMQ环境中创建一个后台线程并且此线程叉后没有继承()。

您是否尝试过删除主,并使用一个单一的过程(所以去除fork()的存在),如果事情走得更好?



Answer 2:

我也有这样的问题上uWSGI 1.9.13从Ubuntu的13.10 repositoryes。 但localy建成19年9月1日工作正常。



Answer 3:

我尝试了所有的不同的选择,最终决定蟒蛇uwsgi选择是最适合我们的设置。 安装说明可以在下面找到网站



文章来源: ZeroMQ + Django & uwsgi issues