代码之家  ›  专栏  ›  技术社区  ›  The Unfun Cat

Cython抱怨生成的pxd定义的C代码需要gil

  •  0
  • The Unfun Cat  · 技术社区  · 6 年前

    我有一些适合简单并行化的代码。但是,它使用C库。如何将pxd文件中的函数定义为nogil?它们是纯C,所以我看不出问题所在。。。

    这是我收到的错误消息:

    Error compiling Cython file:
    ------------------------------------------------------------
    ...
                        it = NULL
                        output[nfound] = indexes[i]
                        nfound += 1
    
                i += 1
                cn.free_interval_iterator(it_alloc)
                                        ^
    ------------------------------------------------------------
    
    ncls/src/ncls.pyx:545:37: Calling gil-requiring function not allowed without gil 
    

    这是我的pxd文件中的定义示例:

    int free_interval_iterator(IntervalIterator *it)
    IntervalIterator *reset_interval_iterator(IntervalIterator *it)
    int find_intervals(IntervalIterator *it0,
                       int start,
                       int end,
                       IntervalMap im[],
                       int n,
                       SublistHeader subheader[],
                       int nlists,
                       IntervalMap buf[],
                       int nbuf,
                       int *p_nreturn,
                       IntervalIterator **it_return)
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   The Unfun Cat    6 年前

    正确的方法是在函数定义之后。

    IntervalIterator *interval_iterator_alloc() nogil