Очередь ожидания Python и сокет в одном потоке
Мое приложение - tcp сервер, использующий epoll для ожидания запросов.
Я хочу дождаться очереди в том же цикле.
то есть: wake up the thread either socket r/w is available or queue is not empty.
Я, конечно, много гуглил, но ни одного хорошего решения не нашел.
я думал о нескольких способах обойти это:
установите тайм-аут (например, 0.5) для epoll.wait, а затем queue.get_nowait, пока он не станет пустым. таким образом, ресурсы процессора тратятся впустую, даже если не с чем иметь дело. и это не так в реальном времени.
используйте доменный сокет вместо очереди, чтобы epoll мог ожидать и того, и другого. таким образом, отправитель должен преобразовать объект python в строковые / двоичные данные для передачи (и наоборот), что скучно.
--- никто из них не удовлетворяет меня.
Интересно, может ли epoll подождать события? - так что я могу event.set() после queue.put(). или же
Есть ли хороший способ решить мою проблему?
СПАСИБО!
1 ответ
Похоже, вы должны смотреть в неблокирующие розетки.