f2py函数释放GIL

4

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

(我很乐意尝试自己发现答案,但我对numpy源代码不够熟悉,不知道从哪里开始查找)...

为了澄清,对这个问题的一个好回答要么帮助我知道在numpy源代码中查找 Py_BEGIN_ALLOW_THREADS 的位置,要么只需让我知道GIL是否被释放(最好附上一些证据)。


这个问题的哪个方面需要更明确?在我看来,它似乎很好。 - Mark
@Mark -- 是的,我倾向于同意 :-)。 - mgilson
我同意这很清晰。虽然非常针对numpy和f2py,但除此之外还是相当清晰的。你尝试在http://central.scipy.org上问过了吗? - Devon_C_Miller
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的宏。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接