今天本來想研究下MultiProcessing標準庫下的進程間通訊,根據 MultiProcessing官網 給的提示,有兩種方法可以來實現進程間的通訊,分別是pipe和queue。由於看queue順眼,就想着拿queue實現,後來,被坑了....因而有了這篇文章。
我按照 python標準庫之MultiProcessing庫的研究 (1) 裏面的代碼來的,結果就是不斷的出錯,死過就是不出結果,看看程序:html
from multiprocessing import Pool, queues import os def func(msg, q): q.put([msg, None, 'hello']) print(os.getpid()) if __name__ == '__main__': q = queues.Queue() pool = Pool(4) for i in range(4): pool.apply_async(func, (i, q, )) print("Mark~ Mark~ Mark~~~~~~~~~~~~~~~~~~~~~~") print(q.qsize()) pool.close() pool.join() # 調用join以前,先調用close函數,不然會出錯。執行完close後不會有新的進程加入到pool,join函數等待全部子進程結束 for i in range(q.qsize()): print(q.get())
其實沒什麼,就是在apply_async函數中加了個Queue對象而已。
但是死活就是不行。後來查了這篇文章 python多進程編程:使用Queue,Pool啓動子進程失敗問題python
後來在官網仔細找了下,發現:
編程
so,就是我須要再加上一個manager,趕明再試試...app