web-dev-qa-db-ja.com

concurrent.futures.ProcessPoolExecutorとmultiprocessing.pool.Pool

私に説明してくださいこれら2つのクラスの違いは何ですか?

multiprocessingモジュールがPython 2.に存在することに気付きました。しかし、機能的にはどうですか?

18
ArekBulski

ドキュメントに記載されているように、 concurrent.futures.ProcessPoolExecutormultiprocessing.Poolのラッパーです。そのため、multiprocessingと同じ制限が適用されます(たとえば、オブジェクトはピクル可能にする必要があります)。

ただし、concurrent.futuresは、さまざまなタイプの非同期タスクを便利な方法で管理するために使用できる抽象インターフェースを提供することを目的としています。例えばプロセスプールの使用からスレッドの使用への非同期戦略の変更は、多くの場合、1行または2行のコードを変更するのと同じくらい簡単です(自分でコーディングする必要はありません)。抽象化におけるもう1つの(関連する)利点は、concurrent.futuresが単一のAPIを覚えておくということです-そして、タスクに最も適したエグゼキューターを選択できます。プロセスを使用していますIOバインドされていますか?すばらしい、ThreadPoolExecutorを使用します。グローバルインタープリターロック(GIL)が原因で高速化に問題が発生しますか?問題ありません。 ProcessPoolExecutor

35
mgilson