我有一个进程间队列,通常是空的,只是偶尔出现一些东西。在我的一个主题中,我想要定义一个这样的while循环:
def mythread(queue1):
while (queue1.get_nowait() != 1):
#do stuff
这很有效,直到队列为空,在我的情况下很快发生。当队列为空时,调用get_nowait()或get(False)会引发空队列异常。有没有办法检查队列而不阻止AND而不引发空的异常?
答案 0 :(得分:2)
使用empty
方法
if queue1.empty():
pass
else:
# get items from the queue
注意:doc说“不可靠”(不开玩笑)。
我想这是因为它可以在发布消息时返回True
(队列为空),因此操作不像捕获异常那样原子。好吧,接下来是一个get_nowait()
调用,我认为除非其他一些线程也可以使用队列,否则无关紧要,在这种情况下可能会发生竞争条件,当你尝试从中读取时队列可能是空的!