使用django,我们需要发送消息到另一个独立的python程序。 Zeromq似乎很轻巧,应该适合这个账单。ZeroMQ + Django&uwsgi问题
但是,试图让它正常工作,并且当将套接字设置为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
也试图推出添加 - 启动脚本,并没有帮助,相同的错误。
的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或其他东西,而且如果可能的话,这样做更干净。
我在忽略什么?
其实,我试过--lazy-apps,并且这是一个无效的选项。然后我检查了uWSGI本身的版本,并且显示了uWSGI 1.0.3-debian。 (这是在Ubuntu上)。服务器也运行uwsgi_python而不是uWSGI,这是否有所不同? – phpBoing