当我调用f2py包装的函数时,全局解释器锁(GIL)是否被释放?
(我很乐意尝试自己发现答案,但我对numpy源代码不够熟悉,不知道从哪里开始查找)...
为了澄清,对这个问题的一个好回答要么帮助我知道在numpy源代码中查找 Py_BEGIN_ALLOW_THREADS 的位置,要么只需让我知道GIL是否被释放(最好附上一些证据)。
当我调用f2py包装的函数时,全局解释器锁(GIL)是否被释放?
(我很乐意尝试自己发现答案,但我对numpy源代码不够熟悉,不知道从哪里开始查找)...
为了澄清,对这个问题的一个好回答要么帮助我知道在numpy源代码中查找 Py_BEGIN_ALLOW_THREADS 的位置,要么只需让我知道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的宏。