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

时间:2012-07-05 04:59:54

标签: python multiprocessing

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

map返回的区别是,实际数组或集合,而imap是否返回数组或集合上的迭代器?我何时才能使用其中一个?

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

3 个答案:

答案 0 :(得分:29)

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

至于chunksize,有时更大的效率是大量工作,因为每次工作人员请求更多工作时,都会有IPC和同步开销。

答案 1 :(得分:0)

imap来自itertools模块,用于python中的快速和内存效率.Map将返回列表,其中imap 返回对象,为每个生成值迭代(在python 2.7中)。下面的代码块将清除差异。

Map返回列表可以直接打印

 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会将将iterable分割成指定大小(近似值)的片段,并将每个片段作为单独的任务提交。

答案 2 :(得分:0)

使用imap,分支调用是并行进行的,而不是依次进行。 例如,在下面您要说三个交易所以获取订单。 imap.pool调用没有阻塞,而不是先按交换1,按交换2,再按交换3的顺序,而是不阻塞,直接转到所有三个交换,以便在调用时立即获取订单书。

from pathos.multiprocessing import ProcessingPool as Pool
pool = Pool().imap
self.pool(self.getOrderBook, Exchanges, Tickers)