来自上下文的ZMQ python套接字捕获异常

时间:2014-10-14 15:59:36

标签: python sockets nginx zeromq uwsgi

我有带有uWSGI的NGINX服务器和带有PyZMQ的python(安装为sudo pip install pyzmq)。

我尝试从ZMQ上下文创建套接字,但始终捕获异常。

import zmq
import os
import sys
from cgi import parse_qs, escape

sys.path.append('/usr/share/nginx/www/application')
os.environ['PYTHON_EGG_CACHE'] = '/usr/share/nginx/www/.python-egg'

def application(environ, start_response): 
    ctx = zmq.Context()         

    try: 
        message = 'Everything OK'
        s = ctx.socket(zmq.REQ) 
    except Exception as e: 
        message = "Exception({0}): {1}".format(e.errno, e.strerror) 
        pass 

    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(message)))] 
    start_response('200 OK', response_headers); 
    return [message]

引发了异常

Exception(14): Bad address

如果我评论了行

s = ctx.socket(zmq.REQ)

然后一切都好。

我在互联网上搜索,但没有人遇到同样的问题。

拜托,你知道吗,我做错了什么?

修改

我编写了简单的python脚本,工作正常,我从recv获得响应:

import zmq
import os
import sys

print 'Create zeromq instance...'

ctx = zmq.Context()
print 'Create socket ...'

try: 
    s = ctx.socket(zmq.REQ)
except Exception as e: 
    print "Exception({0}): {1}".format(e.errno, e.strerror) 
    sys.exit()

s.connect('tcp://localhost:5555')
s.send('fTtt;')
message = s.recv()

print message 

我似乎是uWSGI运行python ZMQ的一个问题,但为什么呢?

2 个答案:

答案 0 :(得分:1)

好吧,似乎与ZeroMQ + Django & uwsgi issues

相同的错误
  

问题出现是因为zmq context创建了一个后台线程,并且在fork()之后没有继承这个线程。

我用简单的python wsgi和它的工作尝试NGINX。

答案 1 :(得分:0)

据推测,您打算在HTTP响应下面的某个地方使用套接字?因为目前你没有连接或绑定任何东西,这使得#34; Bad address"异常相当奇怪。尝试创建一个没有cgi,nginx,缓存,响应内容,只需创建ZMQ上下文和套接字创建的最小示例,看看是否引发了相同的异常。如果是这样,那么您的装订或图书馆中就会出现问题。确保所有内容都已正确安装,并且所有版本都兼容。