マルチプロセッシングは、個別のプロセスを使用してタスクを並列化するための強力な Pool クラスを提供します。 IO バウンド操作を伴うタスクの場合、プロセスの作成により不要なオーバーヘッドが発生する可能性があります。ここで次のような疑問が生じます:
マルチプロセッシング モジュールは、このジレンマに対する解決策を提供しますが、依然として多少隠蔽され、十分に文書化されていません。スレッドベースのプーリング メカニズムにアクセスするには、multiprocessing.pool から ThreadPool クラスをインポートします。
from multiprocessing.pool import ThreadPool
舞台裏で、ThreadPool は Python スレッドをカプセル化するモック Process クラスを利用します。この Process クラスは multiprocessing.dummy モジュール内に常駐し、スレッドに基づいた包括的なマルチプロセッシング インターフェイスを提供します。
python def __enter__(self): assert not self._running self._running = True self._target_thread = threading.Thread(target=self._target, args=self._args, kwargs=self._kwargs) self._target_thread.start() return self def __exit__(self, *excinfo): assert self._running self.Process._exiting = True self._target_thread.join() self._running = False
このスレッドベースの代替手段を利用することで、IO バウンドのタスクをオーバーヘッドなしでシームレスに並列実行できます。プロセス作成の。この隠れた宝石をマルチプロセッシング モジュールの multiprocessing.pool.ThreadPool クラス内に組み込むことで、Python アプリケーションのスレッド プールの力を解放します。
以上がPython の「multiprocessing」モジュールは、IO バインドされたタスクを高速化するためのスレッドベースのプーリングを提供できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。