似乎Pool.map
不会并行运行所有进程。我不确定,但看起来它通过 5-10 个线程束运行它们。我也尝试过maxtaskperchild
论点,但似乎是一样的。我不确定,这是真的(还是我混淆了什么(?为什么?这是一种并行运行所有这些Pool.map()
的方法吗?如果没有,写这样的函数肯定没有问题,但我很惊讶。
pool = multiprocessing.Pool(50, maxtasksperchild=50)
res = pool.map(f, fargs)
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))
结果打印 50enter
行,然后打印 50exit
行
在我的评论中,我不应该说"IO 绑定",而是"非 CPU 绑定"甚至"短暂",因为我得到了很好的确定性结果,直到我将睡眠时间降低到 10 毫秒左右以下