マルチコアのパフォーマンスのために Python ループを並列化する方法
質問:
CPU の場合-bound Python ループ、複数の機能を活用するために操作を効果的に並列化するにはどうすればよいですかcores?
答え:
Python インタープリターは、グローバル インタープリター ロック (GIL) を強制し、同じインタープリターのスレッドによる Python コードの同時実行を禁止します。したがって、CPU バウンドのタスクでは、スレッドの代わりに複数のプロセスを利用する方が効率的です。
プロセス プールによる並列化:
Python には、プロセス プールを作成するための 2 つの簡単な方法が用意されています。 :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
このアプローチでは、マルチプロセッシング モジュールを利用し、スレッド数を直接制御できます。ただし、対話型インタープリターの問題の影響を受ける可能性があります。
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
このメソッドは並行処理を使用します。 .futures.ProcessPoolExecutor はマルチプロセッシング モジュールの上で動作し、同様の機能を提供します。
どちらの方法でも、ループの反復を個別のプロセスに分散することで並列化を実現し、CPU バウンドの計算のパフォーマンスを大幅に向上させます。
以上がマルチコアのパフォーマンスのために CPU バウンドの Python ループを並列化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。