我聽不太懂下面的代碼是如何工作的:使用隊列for循環(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()
同步pw
和pr
但我不知道它是如何工作的。我認爲pr.start()
在pw.start()
完成後收益,這意味着Get %s from queue
只能在三個Put %s to queue...
已被打印後才能收到。我也認爲pool()
是用於多進程和process
只用於單個進程,但現在看來我完全錯了。
感謝您的幫助!
'pool'是爲了創建一組進程。 'Process'創建一個獨立的進程。兩者都是多處理構造。 –
「我以爲''pr.start()'在'pw.start()'完全結束後繼續」 - 'pw.start()'在「pw」啓動後就「完全結束」了。它不會等待'pw'過程結束。 – user2357112
@ user2357112謝謝,但是當我刪除pw.join()時,我無法得到任何'Get%s'消息,你能告訴我pw.join()扮演了什麼角色嗎? –