Using Queue for loops (Python)



我很难理解以下代码的工作原理:

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()同步pwpr但我只是不知道它是如何工作的。我以为pr.start()pw.start()完全完成后才能收到,这意味着Get %s from queue只有在打印了三Put %s to queue...后才能收到。我也认为pool()用于多进程,process仅用于单进程,但现在看来我完全错了。

感谢您的任何帮助!

首先,你的问题应该标题为"join如何在python中工作">

join(( 阻止调用线程(在本例中为主线程(,直到调用其 join 的进程终止。请参阅此处的定义。

所以在你的代码中,你阻止了对pr.terminate((的调用,直到pw完成。当您删除 pw.join 语句时,进程 pr 在启动后不久就会终止,这就是为什么您看不到任何"获取..."消息。

相关内容

  • 没有找到相关文章

最新更新