[問題] 關於Pool在for循環中的問題

看板Python作者時間6年前 (2018/11/26 13:43), 6年前編輯推噓1(101)
留言2則, 2人參與, 6年前最新討論串1/1
各位前輩好 想請教一下關於Pool在for循環中的問題 代碼如下: from multiprocessing import Pool import os,time def worker(num): for i in range(3): print("---num=%d,pid=%d---"%(num, os.getpid())) time.sleep(1) pool = Pool(3) for i in range(10): print("---進程%d---"%i) pool.apply_async(worker, (i,)) pool.close() pool.join() print("---main over---") 執行結果如下: ---進程0--- ---進程1--- ---進程2--- ---進程3--- ---進程4--- ---進程5--- ---進程6--- ---進程7--- ---進程8--- ---進程9--- ---num=0,pid=2520--- ---num=1,pid=2521--- ---num=2,pid=2522--- ---num=1,pid=2521--- ---num=0,pid=2520--- ---num=2,pid=2522--- ---num=1,pid=2521--- ---num=0,pid=2520--- ---num=2,pid=2522--- ... ... ... ---main over--- ==============我是分隔線================= 想請問的是 為什麼執行結果不是以下這樣: ---進程0--- ---進程1--- ---進程2--- ---num=0,pid=2520--- ---num=1,pid=2521--- ---num=2,pid=2522--- ---num=1,pid=2521--- ---num=0,pid=2520--- ---num=2,pid=2522--- ---num=1,pid=2521--- ---num=0,pid=2520--- ---num=2,pid=2522--- ---進程3--- ---進程4--- ---進程5--- ... ... ... 我的理解中,for循環不是應該將裡面的代碼 完整執行一次為一次循環結束嗎? for i in range(10): print("---進程%d---"%i) pool.apply_async(worker, (i,)) 但是為什麼for循環中的print會直接執行完10次循環 後面才3個子進程才一起依序執行完? 雖然我覺得問題應該是在下面的方法 pool.apply_async(worker,(i,)) 但還是不懂為什麼會影響到for循環? 感謝前輩們的解答! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.77.41.210 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1543210986.A.512.html ※ 編輯: firstlovesky (42.77.41.207), 11/26/2018 13:52:45

11/27 13:04, 6年前 , 1F
你知道平行化嗎?
11/27 13:04, 1F

11/27 23:06, 6年前 , 2F
感謝s大提醒方向!google後大概清楚了,感謝你
11/27 23:06, 2F
文章代碼(AID): #1R-uVgKI (Python)
文章代碼(AID): #1R-uVgKI (Python)