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() 等到方法完成