Пожалуйста, объясните цикл событий Zeromq

Чем отличается от мультиплексирования нескольких сокетов через POLLIN?

while True:
    socks = dict(poller.poll())

    if socks.get(control_receiver) == zmq.POLLIN:
        ...

    if socks.get(work_receiver) == zmq.POLLIN:
        ...

Как это может сделать потоки слушателей более надежными и простыми в обращении?


Предыстория: я запускаю свой собственный сервер API и задаюсь вопросом, как сделать контроллер (часть, которая получает запросы от внешнего источника и управляющие сигналы от воркеров)


person Jesvin Jose    schedule 28.09.2011    source источник
comment
Мне не совсем понятно, что вы подразумеваете под «мультиплексированием нескольких сокетов». Можете ли вы уточнить, что вы хотите знать? Вы ищете разъяснений о том, что делает метод poll()? Похоже, вы используете pyzmq, и в этом случае, если вам нужен цикл событий, вы можете посмотреть связанный цикл событий торнадо в zmq.eventloop   -  person minrk    schedule 15.11.2011


Ответы (1)


ØMQ Poller можно использовать для обслуживания и связи с несколькими сокетами.

Однако при использовании ØMQ Poller вы получаете явные блоки (в цикле if) для обработки сокетов. Каждый сокет, зарегистрированный в ØMQ Poller, должен иметь явный блок «if» для его обработки.

Это становится громоздким, когда вы начинаете писать большие программы. Я хотел бы добавить - "немного некрасиво"

С циклами событий это становится более упорядоченным, поскольку вы можете регистрировать обратные вызовы для получения и отправки данных, а также можете структурировать свои обратные вызовы в другом месте.

У меня есть следующие примеры из учебника, который я пишу.

  1. http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/multisocket/zmqpoller.html
  2. http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/multisocket/tornadoeventloop.html

Другие могут дополнить это понимание или исправить его.

person pyfunc    schedule 20.06.2012