Я хотел бы использовать что-то select.select
в Linux, чтобы подождать, пока элемент не может быть помещен в очередь ИЛИ задача отменена. Этот код будет выполняться внутри потока.
Оцененные варианты:
1) Queue.put(timeout=..)
+ проверка флага в цикле -> приводит к занятому ожиданию, которого я бы хотел избежать.
2) multiprocessing.Queue
+ ожидание внутреннего дескриптора файла -> многопроцессорная обработка означает сериализацию, которую я бы хотел избежать.
Шаблон использования в псевдокоде:
import queue
import select
q = queue.Queue()
cancel_signal = ...
while True:
# NON-BUSY wait until we can put item to queue or cancel signal
ret = select.select([q.put, cancel_signal], [], [])
# if cancel_signal:
# terminate thread and return
# else:
# put and continue
Существует ли какая-нибудь поточно-ориентированная реализация очереди Python, которая допускает такое использование? Или как такая очередь может быть реализована?