スレッドベースのプール: マルチプロセッシング プールの代替手段
Python のマルチプロセッシングは、複数のプロセスを使用した並列処理のための強力なメカニズムを提供します。 multiprocessing.Pool クラスは、ワーカー プロセスを管理し、タスクを分散するための便利なインターフェイスを提供します。ただし、重量のあるプロセスが望ましくない場合、代わりにスレッドを利用する同様のソリューションはありますか?
はい、マルチプロセッシング モジュール内に、スレッドベースの並列処理を提供する隠れた宝石があります。それが ThreadPool クラスです。これにアクセスするには、次のコマンドを使用してインポートします。
from multiprocessing.pool import ThreadPool
ThreadPool クラスは、内部で Python スレッドを実行するダミーの Process クラスをラップします。このアプローチにより、標準の Pool クラスと同様に、スレッドベースのマルチプロセッシング API が可能になります。ただし、ワーカー プロセスとは異なり、スレッドはメモリを共有するため、オーバーヘッドが削減される可能性があります。
このスレッドベースの ThreadPool の使用は、標準のプールの使用を反映しています。たとえば、スレッドを使用してマップ操作を並列化するには:
def long_running_func(p): c_func_no_gil(p) pool = ThreadPool(4) xs = pool.map(long_running_func, range(100))
このシナリオでは、基になる関数が IO バウンド操作を実行する前に GIL を解放するため、GIL は問題になりません。したがって、IO 集中型タスクの場合、ThreadPool はプロセスの作成と管理のオーバーヘッドを回避しながら、パフォーマンスを大幅に向上させることができます。
以上がPython のマルチプロセッシング プールに相当するスレッドベースのプールはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。