我正在尝试学习如何使用Python的多处理程序包,但我不理解map
和imap
之间的区别。
map
返回的区别是,实际数组或集合,而imap
是否返回数组或集合上的迭代器?我何时才能使用其中一个?
另外,我不明白chunksize参数是什么。这是传递给每个进程的值的数量吗?
答案 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)