zeromq zmq.Poller & stdin

Можно ли использовать zmq.Poller для опроса доступности данных на stdin ? Если нет, будет ли наиболее эффективным ждать опроса в какой-то момент (в идеале) для доступности данных на zeromq socket & stdin ?

2 Solutions collect form web for “zeromq zmq.Poller & stdin”

да, zmq pollers поддерживают родные FD, включая stdin и т. д., поэтому вам просто нужно проверить sys.stdin.fileno() :

 poller = zmq.Poller() poller.register(sys.stdin, zmq.POLLIN) poller.register(mysocket, zmq.POLLIN) evts = dict(poller.poll(1000)) stdin_ready = evts.get(sys.stdin.fileno(), False) socket_ready = evts.get(mysocket, False) 

Если вы уверены, что никогда не будете работать в Windows, вы можете просто зарегистрировать sys.stdin с zmq.Poller (как описано в minrk, выше ).

Однако реализация select() в Winsock поддерживает только сокеты и не может использоваться для опроса «обычных» файловых дескрипторов, таких как стандартный ввод. Поэтому при работе в Windows вам необходимо подключить стандартный вход с помощью гнезда 0MQ на транспорте inproc.

Предлагаемая реализация с использованием эксклюзивной пары:

 def forward_lines(stream, socket): """Read lines from `stream` and send them over `socket`.""" try: line = stream.readline() while line: socket.send(line[:-1]) line = stream.readline() socket.send('') # send "eof message". finally: # NOTE: `zmq.Context.term()` in the main thread will block until this # socket is closed, so we can't run this function in daemon # thread hoping that it will just close itself. socket.close() def forward_standard_input(context): """Start a thread that will bridge the standard input to a 0MQ socket and return an exclusive pair socket from which you can read lines retrieved from the standard input. You will receive a final empty line when the EOF character is input to the keyboard.""" reader = context.socket(zmq.PAIR) reader.connect('inproc://standard-input') writer = context.socket(zmq.PAIR) writer.bind('inproc://standard-input') thread = threading.Thread(target=forward_lines, args=(sys.stdin, writer)) thread.start() return reader if __name__ == '__main__': context = zmq.Context() reader = forward_standard_input(context) poller = zmq.Poller() poller.register(reader, zmq.POLLIN) poller.register(...) events = dict(poller.poll()) if events.get(reader, 0) & zmq.POLLIN: line = reader.recv() # process line. if events.get(..., 0) & zmq.POLLIN: # ... 
  • Есть пример клиента Spyne?
  • ZeroMQ push socket заставляет клиента не прерываться, когда процесс не прослушивается
  • Python zeromq - Несколько издателей для одного подписчика?
  • 0mq: латентность pubsub постоянно растет с сообщениями?
  • закономерности сохранения zeromq
  • Ошибка при установке ZeroMQ
  • Как я мог установить hwm в шаблоне push / pull zmq?
  • Соединитель ZeroMQ PUB буферизует все мои исходящие данные, когда он подключается
  • Подключение к удаленному экземпляру IPython
  • Идентификация происхождения сообщений ZMQ?
  • Установка pymatbridge на Windows
  •  
    Interesting Posts for Van-Lav

    Использовать метод унаследованного класса в пределах __init__

    Получить образец аудио как число с плавающей точкой из pyaudio-stream

    Невозможно обнаружить лицо и глаза с помощью OpenCV в Python

    PyQt5 – Не удалось загрузить плагин "windows". Доступные платформы: окна, минимальные

    Как случайный индекс леса sklearn feature_importances_

    Создание уникальных, упорядоченных пифагорейских триплетов

    Загрузка файла Django с FTP-сервером

    Как рекурсивно вызывать макрос в jinja2?

    Строка запроса синтаксического анализа Python в список

    Согласование вложенных структур с регулярными выражениями в Python

    Как заменить (или удалить) расширение из имени файла в Python?

    Бонус телеграммы не работает

    KeyboardInterrupt непредсказуем в Python 2.7 под ipython, как я могу сделать это * всегда * прервать текущую оценку?

    Панды: сохраняя только первый ряд данных в каждом 60-секундном бункере

    Возможно ли поведение Python defaultdict при многопроцессорной обработке?

    Python - лучший язык программирования в мире.