在python中使用get_nowait()而不引发空异常

时间:2016-08-26 15:54:58

标签: multithreading python-2.7 queue interprocess

我有一个进程间队列,通常是空的,只是偶尔出现一些东西。在我的一个主题中,我想要定义一个这样的while循环:

def mythread(queue1):

    while (queue1.get_nowait() != 1):
        #do stuff

这很有效,直到队列为空,在我的情况下很快发生。当队列为空时,调用get_nowait()或get(False)会引发空队列异常。有没有办法检查队列而不阻止AND而不引发空的异常?

1 个答案:

答案 0 :(得分:2)

使用empty方法

if queue1.empty():
   pass
else:
   # get items from the queue

注意:doc说“不可靠”(不开玩笑)。

我想这是因为它可以在发布消息时返回True(队列为空),因此操作不像捕获异常那样原子。好吧,接下来是一个get_nowait()调用,我认为除非其他一些线程也可以使用队列,否则无关紧要,在这种情况下可能会发生竞争条件,当你尝试从中读取时队列可能是空的!