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

gra*_*tur 38 python multiprocessing

我想学习如何使用Python的多包,但我不明白之间的差别mapimap.

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

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

Ant*_*ony 33

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

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

  • @Adam 如果您选择 `chunksize = len(iterable)`,那么所有作业都将分配给一个进程!`len(iterable) // numprocesses` 是有用的最大值。权衡是同步开销和 CPU 利用率(大块大小会导致某些进程先于其他进程完成,浪费潜在的处理时间)。 (2认同)

小智 5

使用 imap,分叉调用是并行完成的,而不是一个接一个按顺序完成的。例如,下面您将点击三个交易所来获取订单簿。imap.pool 调用不是按顺序依次访问交易所 1、交易所 2、交易所 3,而是非阻塞的,并且在您调用后立即直接转到所有三个交易所以获取订单簿。

from pathos.multiprocessing import ProcessingPool as Pool
pool = Pool().imap
self.pool(self.getOrderBook, Exchanges, Tickers)
Run Code Online (Sandbox Code Playgroud)