【发布时间】:2021-08-12 17:17:23
【问题描述】:
我有一个多进程程序,其中一个进程将许多项目放入队列,然后在完成将项目放入队列后设置一个事件。另一个进程等待该事件,然后在 while 循环中清空队列,如下面的代码所示,使用 empty() 调用进行检查。问题是每隔一段时间(可能是 10 次中的 1 次),当队列中仍有项目时,empty() 返回 True。在 while 循环期间,没有其他进程或线程接触队列。可以在单个过程中使用以下代码重现该问题。大多数时候,输出是:
The size of my_queue initially is 400
The size of my_queue is 0
但每隔一段时间,我会得到类似的东西:
The size of my_queue initially is 400
The size of my_queue is 377
代码如下:
from multiprocessing import Queue as MPQueue
my_list = []
my_queue = MPQueue()
for i in range(0, 400):
my_queue.put(f"The value of i is {i}")
print(f"The size of my_queue initially is {my_queue.qsize()}")
while not my_queue.empty():
my_list.append(my_queue.get())
print(f"The size of my_queue is {my_queue.qsize()}")
这是 multiprocessing.Queue 模块中的错误还是我遗漏了什么?我也尝试过使用 get_nowait() 然后捕获 Queue.Empty 异常,但我得到了相同的结果。任何帮助将非常感激。谢谢。
【问题讨论】:
标签: python-3.x