[英]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.