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

Use get_nowait() in python without raising empty exception

我有一个进程间队列,它通常是空的,并且偶尔会出现一些东西。在我的一个线程中,我想像这样定义一个 while 循环:

def mythread(queue1):

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

这在队列为空之前效果很好,这在我的情况下很快就会发生。当队列为空时调用 get_nowait() 或 get(False) 会引发空队列异常。有没有什么方法可以在不阻塞且不引发空异常的情况下检查队列?

使用empty方法

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

注意:医生说 "not reliable"(不是开玩笑)。

我想那是因为它可以在发布消息时 return True(队列为空),因此该操作不像捕获异常那样原子化。好吧,然后是 get_nowait() 调用我想这并不重要,除非其他线程也可以使用队列,在这种情况下,可能会出现竞争情况,并且当您尝试从中读取时队列可能为空!