我很难理解以下代码的工作原理:
from multiprocessing import Process, Queue
import os, time, random
def write(q):
for value in ['A', 'B', 'C']:
print 'Put %s to queue...' % value
q.put(value)
time.sleep(random.random())
def read(q):
while True:
value = q.get(True)
print 'Get %s from queue.' % value
if __name__=='__main__':
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
pw.start()
pr.start()
pw.join()
pr.terminate()
似乎pw.join()
同步pw
和pr
但我只是不知道它是如何工作的。我以为pr.start()
pw.start()
完全完成后才能收到,这意味着Get %s from queue
只有在打印了三Put %s to queue...
后才能收到。我也认为pool()
用于多进程,process
仅用于单进程,但现在看来我完全错了。
感谢您的任何帮助!
首先,你的问题应该标题为"join如何在python中工作">
join(( 阻止调用线程(在本例中为主线程(,直到调用其 join 的进程终止。请参阅此处的定义。
所以在你的代码中,你阻止了对pr.terminate((的调用,直到pw完成。当您删除 pw.join 语句时,进程 pr 在启动后不久就会终止,这就是为什么您看不到任何"获取..."消息。