在 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()
调用我想这并不重要,除非其他线程也可以使用队列,在这种情况下,可能会出现竞争情况,并且当您尝试从中读取时队列可能为空!
我有一个进程间队列,它通常是空的,并且偶尔会出现一些东西。在我的一个线程中,我想像这样定义一个 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()
调用我想这并不重要,除非其他线程也可以使用队列,在这种情况下,可能会出现竞争情况,并且当您尝试从中读取时队列可能为空!