ホームページ >バックエンド開発 >Python チュートリアル >Python の「multiprocessing」と「concurrent.futures」は、単純なループを並列化してパフォーマンスを向上させるにはどうすればよいでしょうか?
単純な Python ループの並列化: マルチプロセッシング オプションの探索
ハイパフォーマンス コンピューティングの領域では、並列化は高速化に使用される効果的な手法です。計算負荷の高いタスクの実行。この質問では、2 つの一般的なマルチプロセッシング アプローチ、multiprocessing モジュールと concurrent.futures.ProcessPoolExecutor を使用して、単純な Python ループを並列化する実際の実装について説明します。
CPython のグローバル インタープリター ロック: 警告
特定のメソッドを詳しく説明する前に、CPython 実装のグローバルに対処することが重要です。インタプリタ ロック (GIL)。 GIL は基本的に、同じインタープリター内の異なるスレッドによる Python コードの同時実行を禁止しています。この制限は、スレッドは主に I/O バウンドのタスクには有益ですが、CPU バウンドのワークロードには有益ではないことを意味します。 calc_stuff() 関数名が CPU 依存の操作を示唆しているため、複数のプロセスを利用することをお勧めします。
マルチプロセッシング モジュールによるマルチプロセッシング
マルチプロセッシング モジュールは、プロセスプールを作成しています。以下のコードはその使用法を示しています。
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
concurrent.futures.ProcessPoolExecutor によるマルチプロセッシング
あるいは、concurrent.futures.ProcessPoolExecutor を使用してプロセスの並列化を実現することもできます。 。このメソッドは同じマルチプロセッシング モジュールに依存しており、同一の機能を保証します。
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
どちらのマルチプロセッシング メソッドも、CPU に依存するワークロードを並列化するための簡単なアプローチを提供し、Python コードの効率を高めるための貴重なツールとなります。
以上がPython の「multiprocessing」と「concurrent.futures」は、単純なループを並列化してパフォーマンスを向上させるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。