为什么池不一起运行所有线程?



似乎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 毫秒左右以下

相关内容

  • 没有找到相关文章

最新更新