map
Pythonのマルチプロセッシングパッケージの使い方を学ぼうとしていますが、との違いがわかりませんimap
。
map
たとえば、実際の配列またはセットをimap
返すのに対し、配列またはセットのイテレータを返す違いはありますか?いつ使用しますか?
また、chunksize引数が何であるかわかりません。これは、各プロセスに渡される値の数ですか?
map
Pythonのマルチプロセッシングパッケージの使い方を学ぼうとしていますが、との違いがわかりませんimap
。
map
たとえば、実際の配列またはセットをimap
返すのに対し、配列またはセットのイテレータを返す違いはありますか?いつ使用しますか?
また、chunksize引数が何であるかわかりません。これは、各プロセスに渡される値の数ですか?
それが違いです。mapの代わりにimapを使用する理由の1つは、残りが計算されるのを待たずに最初のいくつかの結果の処理を開始したい場合です。mapは、戻る前にすべての結果を待ちます。
チャンクサイズに関しては、ワーカーがより多くの作業を要求するたびにIPCと同期のオーバーヘッドが発生するため、大量の作業を実行する方が効率的な場合があります。
imapは、python.Mapで高速かつメモリ効率を高めるために使用されるitertoolsモジュールからのものであり、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)
チャンクサイズは、指定されたサイズ(概算)のピースに分割することを繰り返し可能にし、各ピースは個別のタスクとして送信されます。
imapを使用すると、フォークされた呼び出しは、順番にではなく、並行して実行されます。たとえば、以下では、注文書を入手するために3つの取引所を打っています。Exchange 1、Exchange 2、Exchange 3の順にヒットする代わりに、imap.poolの呼び出しは非ブロッキングであり、呼び出すとすぐに3つのExchangeすべてに直接アクセスしてオーダーブックを取得します。
from pathos.multiprocessing import ProcessingPool as Pool
pool = Pool().imap
self.pool(self.getOrderBook, Exchanges, Tickers)