Python 多处理:map 和 imap 有什么区别?

新手上路,请多包涵

我正在尝试学习如何使用 Python 的多处理包,但我不明白 mapimap 之间的区别。

map 返回一个实际的数组或集合,而 imap 返回数组或集合上的迭代器的区别是什么?我什么时候会用一个而不是另一个?

另外,我不明白 chunksize 参数是什么。这是传递给每个进程的值的数量吗?

原文由 grautur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 707
2 个回答

这就是区别。您可能使用 imap 而不是 map 的一个原因是,如果您想开始处理前几个结果而不等待计算其余结果。 map 在返回之前等待每个结果。

至于 chunksize,有时分配大量工作会更有效,因为每次 worker 请求更多工作时,都会有 IPC 和同步开销。

原文由 Antimony 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题