web-dev-qa-db-ja.com

Pythonのmultiprocessing.Pool.mapの「chunksize」パラメーター

たとえば、2つのプロセッサを持つプールオブジェクトがある場合:

p=multiprocessing.Pool(2)

そして、ディレクトリ上のファイルのリストを反復処理し、マップ機能を使用したい

誰かがこの関数のチャンクサイズを説明できますか?

p.map(func, iterable[, chunksize])

たとえば、chunksizeを10に設定すると、10個のファイルごとに1つのプロセッサで処理する必要がありますか?

43
sergio

Pool.mapのドキュメント を見ると、ほぼ正しいようです。chunksizeパラメータを使用すると、イテラブルがに分割されます。おおよそそのサイズで、各ピースは個別のタスクとして送信されます。

したがって、あなたの例では、はい、mapは最初の10(おおよそ)を受け取り、それを単一のプロセッサのタスクとして送信します...次に、次の10が別のタスクとして送信されます。これは、プロセッサが10ファイルごとに交互になるという意味ではありません。プロセッサ#1が1-10および11-20になり、プロセッサ#2が21-30および31-40になる可能性は十分にあります。

38
detly