Было бы неплохо, если бы вы добавили к своему вопросу собственное наблюдение/анализ.
Я не думаю, что есть какая-то разница в производительности, но есть разница в дизайне.
В случае опроса
Вы регистрируете свои сокеты для опроса, а затем используете if blocks
для идентификации каждого сокета и работы с ним.
while should_continue:
socks = dict(poller.poll())
if socket_pull in socks and socks[socket_pull] == zmq.POLLIN:
Work_on_socket_pull ....
if socket_sub in socks and socks[socket_sub] == zmq.POLLIN:
Work_on_socket_sub ....
В случае цикла событий Но использование цикла событий довольно элегантно, когда вы работаете с несколькими сокетами, поскольку вы register callbacks
.
stream_pull = zmqstream.ZMQStream(socket_pull)
stream_pull.on_recv(getcommand)
stream_sub = zmqstream.ZMQStream(socket_sub)
stream_sub.on_recv(process_message)
Как вы можете заметить из второго примера, блоки if удалены. Вы пишете свою операцию обмена сообщениями сокета в другом месте и регистрируете свои методы обратного вызова, когда сокет готов. In this case on_recv()
Я надеюсь, что это проясняет ваш вопрос.
person
pyfunc
schedule
25.06.2012