4

f2py でラップされた関数を呼び出すと、グローバル インタープリター ロック (GIL) が解放されますか?

(私は自分で発見しようと喜んでいますが、どこから探し始めるべきかを知るには、でこぼこしたソースに精通していません)...

明確にするために、この質問に対する適切な回答は、numpy ソースのどこで a を探すべきかを知るのに役立つか、GIL がリリースされたPy_BEGIN_ALLOW_THREADS どうか (できればいくつかの証拠がある場合) を知らせてくれます。

4

1 に答える 1

7

いいえ、f2py はデフォルトで GIL をそのまま残します。ただし、threadsafeディレクティブを追加することで GIL を解放できます。

例:

subroutine foo(a)
!f2py threadsafe
!f2py intent(out) :: a
integer a
a = 5
end subroutine foo

今それをコンパイルします:

f2py -c -m foo --build-dir test_build foo.f90

そして、ソースコードを確認できます:

grep THREAD test_build/src.*/*.c
build/src.linux-x86_64-2.7/testmodule.c:      Py_BEGIN_ALLOW_THREADS
build/src.linux-x86_64-2.7/testmodule.c:      Py_END_ALLOW_THREADS

ただし、行を削除するプロセスを繰り返すと!f2py threadsafe、GIL を解放するマクロは含まれません。

于 2013-04-13T04:08:22.857 に答える