为什么池不能同时运行所有线程?

时间:2019-08-09 13:49:27

标签: python multiprocessing

似乎Pool.map不能并行运行所有进程。我不确定,但是看起来它是由5-10个线程串来运行的。我也尝试过maxtaskperchild参数,但是看起来一样。我不确定,这是真的(还是我感到困惑)?为什么?是否可以通过Pool.map()并行运行它们?如果没有的话,肯定写出这样的函数没问题,但是我很惊讶。

pool = multiprocessing.Pool(50, maxtasksperchild=50)
res = pool.map(f, fargs)

1 个答案:

答案 0 :(得分:0)

Linux下的Python 3.7确实可以同时运行所有内容,例如:

import multiprocessing
import time

def fn(i):
    print(f"enter {i}")
    time.sleep(0.1)
    print(f"exit {i}")

with multiprocessing.Pool(50) as pool:
    pool.map(fn, range(50))

先打印50 enter行,然后再打印50 exit

在我的评论中,我不应该说“ IO绑定”,而是“非CPU绑定”,甚至“短暂”,因为我得到好的确定性结果,直到将睡眠时间降低到10ms左右