Python Threading Queue.put (block = True) отмена без занятого ожидания - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы использовать что-то 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, которая допускает такое использование? Или как такая очередь может быть реализована?

...