【问题标题】:Python: semantic differences between pool.map and map?Python:pool.map 和 map 之间的语义差异?
【发布时间】:2022-01-03 05:36:33
【问题描述】:
我有一个函数,它接受一个参数,将文件保存到固定目录,然后返回None。我想使用multiproccessing.Pool.map 在许多参数上并行执行此函数。这真的适用于不返回值的函数吗?
我问是因为documentation 说Pool.map 等效于内置map,但map(fcn, arg_list) 在其结果被迭代之前实际上并不执行函数调用。在我的情况下,迭代结果是没有意义的,即None。
这方面的文档不正确吗?
【问题讨论】:
标签:
python
multiprocessing
documentation
【解决方案1】:
Python 的内置 map 在迭代之前不会执行该函数,因为 map 调用的结果是一个生成器...
multiprocessing.Pool.map 将立即提交任务执行。
【解决方案2】:
我会说文档有点过时了。内置的 map 一路上变成了可迭代的,但 Pool.map (仍然)返回一个列表。因此,multiprocessing 机器 迭代返回的结果,以构建该列表(是的,在您的情况下,它们都恰好是 None,但无论结果是)。
您也需要遍历该列表,但我建议无论如何都要这样做:然后代码将很强大,例如,可能会更改 Pool.map() 的未来版本返回一个可迭代对象。