1. ホーム
  2. python

[解決済み] マルチプロセシングプールに似たスレッディングプール?

2022-03-25 03:50:52

質問

ワーカー用のPoolクラスはありますか? スレッド マルチプロセッシング・モジュールの プールクラス ?

例えば、map関数を簡単に並列化する方法が気に入っています。

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を解放します。

スレッドプールは自分で書かないといけないのでしょうか?

どのように解決するのですか?

今知ったのですが、実は のスレッドベースのPoolインターフェースは multiprocessing モジュールに含まれていますが、どこか隠れていて、適切なドキュメントがありません。

を介してインポートすることができます。

from multiprocessing.pool import ThreadPool

PythonのスレッドをラップしたダミーのProcessクラスを使って実装されています。 このスレッドベースのProcessクラスは multiprocessing.dummy で少し触れています。 ドキュメント . このダミーモジュールは、スレッドに基づくマルチプロセッシングのインターフェイス全体を提供するとされています。