[問題] 關於Pool在for循環中的問題
各位前輩好
想請教一下關於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
11/27 23:06, 2F
Python 近期熱門文章
PTT數位生活區 即時熱門文章