python3 使用 multiprocessing.Pool时,子进程未启动
天蓬老师
天蓬老师 2017-04-17 16:58:10
0
2
507
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(2)
刘奇

只要在 A 代碼 p.close() 之後加一句 p.join() 就是等效的。 p.close() 之后加一句 p.join() 就是等效的。

或者在 B 代码 p_fi.start() 之前加一句 p_fi.daemon = p_se.daemon = p_th.daemon = True

或在B 代碼p_fi.start() 之前加一句p_fi.daemon = p_se.daemon = p_th.daemon = True 也是等效的(這時B 代碼也不能正常運作)。

總之區別就是 A 程式碼沒有等子進程完成就結束主進程了,B 程式碼等子進程完成再結束主進程。

更新完整程式碼後:

dict_init_queue = Queue()
需要改為:

from multiprocessing import Manager
manager = Manager()
dict_init_queue = manager.Queue()
否則不能在進程之間共享佇列。 🎜
刘奇

樓上說得對 再close之後,應該要有一個join 來等待執行結束

我是看了 https://github.com/shazow/workerpool 這個專案的程式碼 才知道的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板