ホームページ >バックエンド開発 >Python チュートリアル >文書化されていない Python の「ThreadPool」を並列処理に使用する必要があるのはどのような場合ですか?
マルチプロセッシングにおけるスレッドベースのプーリング
マルチプロセッシング モジュールは、個別のプロセスを使用してタスクを並列化するための強力な「プール」クラスを提供します。ただし、このアプローチではプロセスの作成によりオーバーヘッドが発生します。実際の関数呼び出し中に GIL が解放される IO バウンド操作の場合、スレッドを使用するとパフォーマンスが向上します。
ThreadPool クラスの紹介
一般的な考えに反して、マルチプロセッシング モジュールは確かにスレッドベースのプール インターフェイスを提供します。この隠れた宝石は、multiprocessing.pool import ThreadPool からアクセスでき、スレッドを使用してタスクを並列化する便利な方法を提供します。
文書化されていないステータスにもかかわらず、ThreadPool クラスは、Python をラップするダミーの Process クラスを使用してマルチプロセッシング プール インターフェイスを実装します。スレッド。このダミーの Process クラスは、スレッドに基づいたマルチプロセッシング インターフェイス全体を提供する multiprocessing.dummy モジュール内に存在します。
使用例
ProcessPool と同様に、ThreadPool は次のことができます。マップを並列化するために使用されます関数:
import multiprocessing.pool def long_running_func(p): c_func_no_gil(p) p = multiprocessing.pool.ThreadPool(4) xs = p.map(long_running_func, range(100))
注: ThreadPool クラスは、すべての場合において、特にタスクが大量の CPU 時間を必要とする場合、ProcessPool ほど効率的ではありません。
以上が文書化されていない Python の「ThreadPool」を並列処理に使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。