我正在尝试学习如何使用 Python 的多处理包,但我不明白 map
和 imap
之间的区别。
map
返回一个实际的数组或集合,而 imap
返回数组或集合上的迭代器的区别是什么?我什么时候会用一个而不是另一个?
另外,我不明白 chunksize 参数是什么。这是传递给每个进程的值的数量吗?
原文由 grautur 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试学习如何使用 Python 的多处理包,但我不明白 map
和 imap
之间的区别。
map
返回一个实际的数组或集合,而 imap
返回数组或集合上的迭代器的区别是什么?我什么时候会用一个而不是另一个?
另外,我不明白 chunksize 参数是什么。这是传递给每个进程的值的数量吗?
原文由 grautur 发布,翻译遵循 CC BY-SA 4.0 许可协议
imap 来自 itertools 模块,该模块用于 python 中的快速和内存效率。Map 将 返回列表,其中 imap 返回为每次迭代生成值的对象(在 python 2.7 中)。下面的代码块将清除差异。
地图返回列表可以直接打印
from itertools import *
from math import *
integers = [1,2,3,4,5]
sqr_ints = map(sqrt, integers)
print (sqr_ints)
imap 返回转换为列表并打印的对象。
from itertools import *
from math import *
integers = [1,2,3,4,5]
sqr_ints = imap(sqrt, integers)
print list(sqr_ints)
Chunksize 将使 可迭代对象被拆分成指定大小(近似值)的片段, 并且每个片段都作为单独的任务提交。
原文由 Chandan 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
4 回答930 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
这就是区别。您可能使用 imap 而不是 map 的一个原因是,如果您想开始处理前几个结果而不等待计算其余结果。 map 在返回之前等待每个结果。
至于 chunksize,有时分配大量工作会更有效,因为每次 worker 请求更多工作时,都会有 IPC 和同步开销。