似乎Pool.map
不能并行运行所有进程。我不确定,但是看起来它是由5-10个线程串来运行的。我也尝试过maxtaskperchild
参数,但是看起来一样。我不确定,这是真的(还是我感到困惑)?为什么?是否可以通过Pool.map()
并行运行它们?如果没有的话,肯定写出这样的函数没问题,但是我很惊讶。
pool = multiprocessing.Pool(50, maxtasksperchild=50)
res = pool.map(f, fargs)
答案 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左右