マルチプロセッシングモジュールのプールクラスに似たワーカースレッド用のプールクラスはありますか?プールクラス?
例えば、マップ関数を並列化する簡単な方法が気に入っています
def long_running_func(p):
c_func_no_gil(p)
p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))
ただし、新しいプロセスを作成するオーバーヘッドなしでこれを実行したいと思います。
GIL については知っています。ただし、私のユースケースでは、関数は IO バインドされた C 関数であり、Python ラッパーは実際の関数呼び出しの前に GIL を解放します。
独自のスレッド プールを作成する必要がありますか?
ベストアンサー1
モジュールには実際にスレッドベースの Pool インターフェースがあることがわかりましたがmultiprocessing
、それはある程度隠されており、適切に文書化されていません。
インポートできるのは
from multiprocessing.pool import ThreadPool
これは、PythonスレッドをラップするダミーのProcessクラスを使用して実装されています。このスレッドベースのProcessクラスは、multiprocessing.dummy
これは、ドキュメントこのダミー モジュールは、スレッドに基づくマルチプロセッシング インターフェイス全体を提供すると思われます。