Python:pool.map 和 map 之间的语义差异?

Posted

技术标签:

【中文标题】Python:pool.map 和 map 之间的语义差异?【英文标题】:Python: semantic differences between pool.map and map? 【发布时间】:2022-01-03 05:36:33 【问题描述】:

我有一个函数,它接受一个参数,将文件保存到固定目录,然后返回None。我想使用multiproccessing.Pool.map 在许多参数上并行执行此函数。这真的适用于不返回值的函数吗?

我问是因为documentation 说Pool.map 等效于内置map,但map(fcn, arg_list) 在其结果被迭代之前实际上并不执行函数调用。在我的情况下,迭代结果是没有意义的,即None

这方面的文档不正确吗?

【问题讨论】:

【参考方案1】:

Python 的内置 map 在迭代之前不会执行该函数,因为 map 调用的结果是一个生成器...

multiprocessing.Pool.map 将立即提交任务执行。

【讨论】:

【参考方案2】:

我会说文档有点过时了。内置的 map 一路上变成了可迭代的,但 Pool.map (仍然)返回一个列表。因此,multiprocessing 机器 迭代返回的结果,以构建该列表(是的,在您的情况下,它们都恰好是 None,但无论结果是)。

您也需要遍历该列表,但我建议无论如何都要这样做:然后代码将很强大,例如,可能会更改 Pool.map() 的未来版本返回一个可迭代对象。

【讨论】:

以上是关于Python:pool.map 和 map 之间的语义差异?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 多处理中将 Pool.map 与共享内存数组结合起来

Python multiprocessing里面的Pool.map和Pool.join区别

在Python中将多个参数传递给pool.map()函数[重复]

python multiprocessing pool.map() 等到方法完成

CHUNKSIZE无关的多处理在Python / pool.map?

Python multiprocess.Pool.map 无法处理大型数组。