搜尋

首頁  >  問答  >  主體

python3 使用 multiprocessing.Pool时,子进程未启动

天蓬老师天蓬老师2767 天前513

全部回覆(2)我來回復

  • 怪我咯

    怪我咯2017-04-17 17:00:10

    只要在 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()
    

    否則不能在進程之間共享佇列。 🎜

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 17:00:10

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

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

    回覆
    0
  • 取消回覆