multiprocessing.Manager().Queue() 的一个问题
import multiprocessing
import time
def task(q: multiprocessing.Queue, name):
while True:
v = q.get()
print(f"subprocess {name=} get {v=}")
if __name__ == "__main__":
q = multiprocessing.Manager().Queue()
p1 = multiprocessing.Process(target=task, args=(q, "sub1",)) # 创建第一个进程用于接收 queue 中的数据
p1.start()
q.put(1) # 向 queue 中发送两条数据
time.sleep(1)
q.put(2)
time.sleep(1)
p1.terminate() # 销毁第一个进程
p1.join()
p1.close()
p2 = multiprocessing.Process(target=task, args=(q, "sub2", )) # 创建第二个进程用于接收 queue 中的数据
p2.start()
q.put(3) # 向 queue 中发送两条数据
time.sleep(1)
q.put(4)
time.sleep(999)
运行结果基本为:
值得注意的是,我试了很多次,结果都是这样的,3 那个元素消失了
在这个过程中,我还发现,如果将上面的 multiprocessing.Manager().Queue() 修改为 multiprocessing.Queue(),则可能会出现即使向queue中put数据成功了,get() 都会一直阻塞,我猜测可能存在锁释放的问题。
所以后面将 Queue() 都改为了 multiprocessing.Pipe() 暂时没有发现问题