Использование ZMQ внутри rq worker
Я пытаюсь настроить zmq
гнездо внутри рабочей задачи в python-rq
,
Если я создам context
внутри функции задачи:
def push( user, task_id, data ):
"""Push message to `user` over websocket.
"""
ctx = zmq.Context()
pub = ctx.socket( zmq.PUB )
pub.connect( 'ipc:///tmp/message_flow_in' )
pub.send( b"0 " + json.dumps( {'username': user,
'id': task_id,
'data': data
}
).encode( 'utf-8' )
)
pub.send()
звонок ничего не делает.
1 ответ
Так что я не знаю Python, так что это может быть неправильно, но это очень похоже на проблемы, которые у меня были с zeromq в C++, так:
Когда вы вызываете send, сообщение не отправляется фактически, оно копируется в буферы внутри сокета / контекста для последующей отправки по контексту. Таким образом, когда ваша функция возвращается и локальный сокет / контекст выходит из области видимости, тогда сообщение, вероятно, удаляется до того, как оно отправлено контекстом.