f2py でラップされた関数を呼び出すと、グローバル インタープリター ロック (GIL) が解放されますか?
(私は自分で発見しようと喜んでいますが、どこから探し始めるべきかを知るには、でこぼこしたソースに精通していません)...
明確にするために、この質問に対する適切な回答は、numpy ソースのどこで a を探すべきかを知るのに役立つか、GIL がリリースされたPy_BEGIN_ALLOW_THREADS
かどうか (できればいくつかの証拠がある場合) を知らせてくれます。
いいえ、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 を解放するマクロは含まれません。