ØMQ многопоточный REQ / REP - PullRequest
       6

ØMQ многопоточный REQ / REP

1 голос
/ 22 сентября 2011

Я пытаюсь написать приложение, которое позволит пользователю запускать длительные процессы вычислений, которые будут получать команды от веб-сервера с использованием ØMQ. Я использую стандартную архитектуру запроса-ответа: на сервере есть сокет REQ, подключенный к сокету REP рабочих процессов. Когда от пользователя поступает новая команда, она отправляется рабочему процессу:

self.instance_dict[instance_id].socket.send(json_command)
result = self.instance_dict[instance_id].socket.recv()

Проблема возникает, когда вторая команда отправляется, пока первая еще выполняется. Обеспечивает ли ØMQ функциональность, которая позаботится об очередях сообщений, или я сам ее не реализую? Или я должен изменить архитектуру?

1 Ответ

3 голосов
/ 22 сентября 2011

Для REQ / REP вторая команда не должна отправляться до тех пор, пока первая команда не будет подтверждена; ZMQ обеспечивает правильный порядок сообщений в протоколе.

Возможно, вы захотите использовать вместо этого PUSH / PULL - тогда сообщения будут автоматически помещаться в очередь, не требуя промежуточных ответов (кроме того, я думаю, что это также автоматически позволяет использовать несколько рабочих для масштабирования и балансировки нагрузки). 1003 *

Если вы используете IOLoop, вы можете настроить ZMQStreams, которые будут помещать в очередь сообщения внутри процесса. Смотри https://github.com/zeromq/pyzmq/blob/master/zmq/eventloop/ioloop.py

...