繁体   English   中英

Python 多处理映射和应用不能并行运行?

[英]Python multiprocessing map and apply doesn't run in parallel?

我对 python 多处理模块感到困惑。 假设我们这样写代码:

pool = Pool()
for i in len(tasks) :
    pool.apply(task_function, (tasks[i],))

首先 i = 0,第一个子处理器将创建并执行第一个任务。 由于我们使用的是apply 而不是apply_async,主处理器被阻塞,所以我没有机会获得增量并执行第二个任务。 那么通过这种方式,我们实际上是在编写串行代码,而不是在多处理中运行? 那么当我们使用 map 而不是 map_async 时也是如此吗? 难怪这些任务的结果是有序的。 如果这是事实,我们甚至都懒得使用多处理的 map 和 apply 函数。 纠正我,如果我错了

根据文档

应用(功能[,参数[,kwds]])

等效于 apply() 内置函数。 它会阻塞直到结果准备好,因此 apply_async() 更适合并行执行工作。 此外, func 仅在池的其中一个工作程序中执行。

所以是的,如果您想将工作委托给另一个进程并将控制权返回给您的主进程,则必须使用apply_async

关于你的说法:

如果这是事实,我们甚至都懒得使用 multiprocessing 的 map 和 apply 函数

取决于你想做什么。 例如map将参数分成块和应用功能在池的不同处理每个数据块,所以实现并行。 这适用于您的示例:

pool.map(task_funcion, tasks)

它将tasks拆分为多个部分,然后对池中的每个进程调用task_function ,其中包含不同的tasks 例如,您可以让 Process1 运行task_function(task1) , Process2 同时运行task_function(task2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM