Python: использование select при работе с Queue

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

К сожалению, сокеты и очереди в Python имеют разную организацию, что не позволяет использовать select для работы с Queue.

В книге «Python cookbook» 3-е изд., глава 12.13. «Polling Multiple Thread Queues предлагается решение проблемы на базе сокетов.

Пример использования:

Результат работы программы: