3

整数を取るC(++)関数があり、それがpython apiで(C)pythonにバインドされているとすると、pythonから呼び出すことができます。

import c_module
c_module.f(10)

今、私はそれを並列化したいです。問題は、この場合、GILはどのように機能するかということです。処理する番号のキューがあり、一部のワーカー(threading.Thread)が並行して作業していて、それぞれがキューから取得されたc_module.f(number)場所numberを呼び出しているとします。

GILがインタプリタをロックする通常の場合との違いは、c_module.fコンパイルされているため、インタプリタを評価する必要がないことです。したがって、問題は次のとおりです。この場合、処理は本当に並列ですか?

4

1 に答える 1

4

GILが明示的にリリースされたC拡張コードを現在実行しているスレッドは、並行して実行されます。拡張機能で行う必要があることについては、 http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lockを参照してください。

Pythonスレッドは、I/Oバウンドの実行またはGUIの応答性に最も役立ちます。スレッドを使用してPythonを多用する実行は行いません。並列処理を保証したい場合は、multiprocessingライブラリを確認してください。

于 2010-05-12T22:18:28.240 に答える