我使用多处理池在不同进程之间划分任务。我注意到一个奇怪的行为,即只有一半的预期工作人员在调用 map_async 后开始工作。
也就是说,当我打电话时
pool = Pool(12, init_func, (pram1, param2, param3))
pool.map_async(main_process_func, list_of_items, chunksize=1)
我看到实际上有 6 个工作人员开始执行 main_process_func!
但是当我添加参数 maxtasksperchild=1 时,即:
pool = Pool(12, init_func, (pram1, param2, param3), maxtasksperchild=1)
pool.map_async(main_process_func, list_of_items, chunksize=1)
然后我看到有 12 个 worker 开始执行 main_process_func!
根据我的理解, maxtasksperchild 应该与此行为无关。你认为为什么会这样?为什么首先只有一半的工人开始跑步?
Python 版本:3.6.9 操作系统:Ubuntu 18.04.4