当我调用f2py包装函数时,GIL是否会被释放?
(我很高兴自己去发现,但我不太熟悉这个粗野的来源,不知道从哪里开始寻找).
为了澄清,对这个问题的一个很好的回答可以帮助我知道numpy源代码中寻找Py_BEGIN_ALLOW_THREADS的位置,或者它只会让我知道GIL是否被释放(最好有一些证据)。
发布于 2013-04-13 04:08:22
不,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的宏。
https://stackoverflow.com/questions/15976369
复制相似问题