Python:pool.map 和 map 之间的语义差异?
Python: semantic differences between pool.map and map?
我有一个函数接受一个参数,将文件保存到固定目录,然后 returns None
。我想使用 multiproccessing.Pool.map
在许多参数上并行执行此函数。这真的适用于没有 return 值的函数吗?
我问是因为 documentation 说 Pool.map
等同于内置的 map
,但是 map(fcn, arg_list)
直到迭代其结果。在我的例子中,迭代结果是没有意义的,它们是 None
.
这方面的文档不正确吗?
Python 的内置 map
在迭代之前不会执行该函数,因为 map
调用的结果是一个生成器...
multiprocessing.Pool.map
会立即提交任务执行。
我会说文档有点过时了。内置的 map
一直是一个可迭代对象,但是 Pool.map
(仍然)return 是一个列表。因此 multiprocessing
机制 是 迭代结果 returned,以构建该列表(是的,它们都恰好是 None
你的情况,但无论结果如何,都会构建列表。
您也不需要 遍历该列表,但我还是建议您这样做:这样代码就可以稳健地应对未来可能发生变化的版本Pool.map()
也是 return 可迭代对象。
我有一个函数接受一个参数,将文件保存到固定目录,然后 returns None
。我想使用 multiproccessing.Pool.map
在许多参数上并行执行此函数。这真的适用于没有 return 值的函数吗?
我问是因为 documentation 说 Pool.map
等同于内置的 map
,但是 map(fcn, arg_list)
直到迭代其结果。在我的例子中,迭代结果是没有意义的,它们是 None
.
这方面的文档不正确吗?
Python 的内置 map
在迭代之前不会执行该函数,因为 map
调用的结果是一个生成器...
multiprocessing.Pool.map
会立即提交任务执行。
我会说文档有点过时了。内置的 map
一直是一个可迭代对象,但是 Pool.map
(仍然)return 是一个列表。因此 multiprocessing
机制 是 迭代结果 returned,以构建该列表(是的,它们都恰好是 None
你的情况,但无论结果如何,都会构建列表。
您也不需要 遍历该列表,但我还是建议您这样做:这样代码就可以稳健地应对未来可能发生变化的版本Pool.map()
也是 return 可迭代对象。