Очередь ожидания Python и сокет в одном потоке

Мое приложение - tcp сервер, использующий epoll для ожидания запросов.
Я хочу дождаться очереди в том же цикле.
то есть: wake up the thread either socket r/w is available or queue is not empty.

Я, конечно, много гуглил, но ни одного хорошего решения не нашел.
я думал о нескольких способах обойти это:

  1. установите тайм-аут (например, 0.5) для epoll.wait, а затем queue.get_nowait, пока он не станет пустым. таким образом, ресурсы процессора тратятся впустую, даже если не с чем иметь дело. и это не так в реальном времени.

  2. используйте доменный сокет вместо очереди, чтобы epoll мог ожидать и того, и другого. таким образом, отправитель должен преобразовать объект python в строковые / двоичные данные для передачи (и наоборот), что скучно.

--- никто из них не удовлетворяет меня.

Интересно, может ли epoll подождать события? - так что я могу event.set() после queue.put(). или же

Есть ли хороший способ решить мою проблему?

СПАСИБО!

1 ответ

Похоже, вы должны смотреть в неблокирующие розетки.

https://docs.python.org/2/howto/sockets.html

Другие вопросы по тегам