Клавиатура прерываемая очередь блокирования в Python

Это практическое соглашение об осуществлении. Что вы представляете в качестве набора символов для базы 100? : -)

Использование цифр и всего алфавита достаточно распространено, поэтому функция base с непрерывным набором приемлемых базовых значений реализовала эту функциональность. Основание 1 просто len (arg).

Существует также соглашение для кодирования base-64; без соглашения для значений 37-63, однако, функция base оставила значение radix-64 для отдельного интерфейса.

12
задан Bharel 23 April 2016 в 22:08
поделиться

2 ответа

Queue объекты имеют это поведение, потому что они блокируют использование Condition объекты формируются threading модуль. Таким образом, Вашим решением является действительно единственный способ пойти.

Однако, если Вы действительно хотите a Queue метод, который делает это, Вы можете monkeypatch Queue класс. Например:

def interruptable_get(self):
    while True:
        try:
            return self.get(timeout=1000)
        except Queue.Empty:
            pass
Queue.interruptable_get = interruptable_get

Это позволило бы Вам сказать

q.interruptable_get()

вместо

interruptable_get(q)

хотя monkeypatching обычно препятствует сообщество Python в случаях, таких как они, так как регулярная функция кажется столь же хорошей.

6
ответ дан 2 December 2019 в 22:23
поделиться

Это не может относиться к Вашему варианту использования вообще. Но я успешно использовал этот шаблон в нескольких случаях: (поверхностный и вероятный багги, но Вы понимаете).

STOP = object()

def consumer(q):
    while True:
        x = q.get()
        if x is STOP:
            return
        consume(x)

def main()
    q = Queue()
    c=threading.Thread(target=consumer,args=[q])

    try:
        run_producer(q)
    except KeybordInterrupt:
        q.enqueue(STOP)
    c.join()
4
ответ дан 2 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: