4

当我调用 f2py 包装函数时,全局解释器锁 (GIL) 是否会被释放?

(我很高兴自己尝试发现,但我对 numpy 的来源不够熟悉,不知道从哪里开始寻找)......

澄清一下,对这个问题的一个好的回答要么帮助我知道在 numpy 源中寻找 a 的位置,Py_BEGIN_ALLOW_THREADS 要么它只会让我知道 GIL 是否已发布(最好有一些证据)。

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 回答