作者firstlovesky ()
看板Python
标题[问题] 关於Pool在for循环中的问题
时间Mon Nov 26 13:43:03 2018
各位前辈好
想请教一下关於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://webptt.com/cn.aspx?n=bbs/Python/M.1543210986.A.512.html
※ 编辑: firstlovesky (42.77.41.207), 11/26/2018 13:52:45
1F:推 s860134: 你知道平行化吗? 11/27 13:04
2F:→ firstlovesky: 感谢s大提醒方向!google後大概清楚了,感谢你 11/27 23:06