【问题标题】:f2py function release GILf2py 函数发布 GIL
【发布时间】:2013-04-12 16:24:16
【问题描述】:

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

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

为了澄清,这个问题的一个好的答案将或者帮助我知道在 numpy 源中的哪里寻找Py_BEGIN_ALLOW_THREADS 或者它只会让我知道 GIL 是否被释放(最好有一些证据)。

【问题讨论】:

  • 这个问题的哪一方面需要说清楚?我觉得很好。
  • @Mark -- 是的,我倾向于同意 :-)。
  • 我同意这很清楚。非常特定于 numpy 和 f2py,但除此之外非常清楚。您是否尝试过在central.scipy.org 上提问?

标签: python numpy fortran gil f2py


【解决方案1】:

不,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 的宏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2012-06-10
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多