当前位置:  开发笔记 > 编程语言 > 正文

Python中的键盘可中断阻塞队列

如何解决《Python中的键盘可中断阻塞队列》经验,为你挑选了1个好方法。

它似乎

import Queue

Queue.Queue().get(timeout=10)

是键盘可中断(ctrl-c)而

import Queue

Queue.Queue().get()

不是.我总是可以创建一个循环;

import Queue
q = Queue()

while True:
    try:
        q.get(timeout=1000)
    except Queue.Empty:
        pass

但这似乎是一件奇怪的事情.

那么,是否有一种方法可以无限期地等待但是键盘可以中断Queue.get()?



1> Eli Courtwri..:

Queue对象具有此行为,因为它们使用Condition对象形成threading模块.所以你的解决方案真的是唯一的出路.

但是,如果您真的想要一个Queue执行此操作的方法,则可以对该Queue类进行monkeypatch .例如:

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)

虽然在这种情况下,Python社区通常不鼓励monkeypatching,因为常规函数似乎同样好.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有