2014-10-14 5 views
1

У меня есть сервер NGINX с uWSGI и питоном с PyZMQ (установлен как sudo pip install pyzmq).Ядро python ZMQ из исключения catch catch

Я пытаюсь создать сокет из контекста 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) 

тогда все в порядке.

Я искал в Интернете, но никто не имеет такой же проблемы.

Возможно, у вас есть какая-то идея, что я делаю неправильно?

Edit:

Я написал простой питон скрипт, что работает, и я получаю ответ от 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 запустить питона ZMQ, но почему?

+0

Какое исключение привлекло? – tdelaney

+0

Редактировать сообщение для поднятого исключения – mkxqiu

ответ

1

Хорошо, это, кажется, чтобы быть в той же ошибкой, чем ZeroMQ + Django & uwsgi issues

Проблема возникает потому, что контекст zmq создать фоновый поток, и этот поток не передается по наследству после развилки().

Я пробую NGINX с простым python wsgi и его работой.

0

Предположительно, вы собираетесь использовать сокет где-то ниже ответа HTTP? Потому что на данный момент вы не подключаетесь или не привязываетесь ни к чему, что делает исключение «Плохой адрес» довольно странным. Попробуйте создать минимальный пример без cgi, nginx, cache, response stuff, просто создание контекста ZMQ и создание сокета, и посмотрите, если вы создаете одно и то же исключение. Если это так, похоже, в вашей привязке или вашей библиотеке есть что-то неуловимое. Убедитесь, что все установлено правильно, и все ваши версии совместимы.

+0

Нет, для тестирования я не подключался ни к чему. Когда эта ошибка будет исправлена, следующий шаг будет подключен к localhost на порту 5555, где будет прослушивать моего демона. Я редактировал вопрос с помощью простого скрипта ZMQ, который отлично работает – mkxqiu

+0

Ну, это меняет вещи. Ошибка, вероятно, не имеет ничего общего с ZMQ. Попробовали ли вы запустить скрипт без кода ZMQ и, кроме исключения исключений, подтвердили, что он работает так, как ожидалось? – Jason

Смежные вопросы