今天原本想研究下MultiProcessing標准庫下的進程間通信,根據 MultiProcessing官網 給的提示,有兩種方法能夠來實現進程間的通信,分別是pipe和queue。因為看queue順眼,就想着拿queue實現,后來,被坑了....於是有了這篇文章。
我按照 python標准庫之MultiProcessing庫的研究 (1) 里面的代碼來的,結果就是不斷的出錯,死過就是不出結果,看看程序:
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啟動子進程失敗問題
后來在官網仔細找了下,發現:
so,就是我需要再加上一個manager,趕明再試試...