我们说我有两个过程:读者和作家。作者如何检测读者何时完成写入值?
multiprocessing
模块a queue with a close method似乎是为此目的而定制的。但是如何检测队列何时关闭?
这似乎不起作用,因为作者永远不会退出:
import multiprocessing as mp
def getter(q):
while True:
try:
print(q.get())
except Exception:
break
def putter(q):
q.put(1)
q.put(2)
q.close()
q = mp.Queue()
writer = mp.Process(target=putter, args=(q, ))
reader = mp.Process(target=getter, args=(q, ))
reader.start()
writer.start()
writer.join()
reader.join()
读写器对是否应使用标记值来表示写入结束?那么采用close
方法的重点是什么?
编辑:当this question询问队列模块(现在是queue)时,我会特别询问mp.Queue
以及.close
方法的正确用法。
答案 0 :(得分:3)
但是如何检测队列何时关闭?
你不是。这不是close
的目的。调用close
甚至不能保证不再向队列添加任何项目; docs说
表示当前流程不会在此队列中添加更多数据。
close
旨在关闭当前进程的该队列的进程线程(或至少开始关闭它),而不是将队列末尾传递给其他进程。
如果您想要发出不再向队列写入值的信号,请使用标准技术,例如将哨兵对象排队,就像使用普通queue.Queue
一样。