如何在不带gil(nogil)的cython cdef中返回两个值

时间:2019-02-19 05:36:21

标签: python cython

我有一个函数,我试图返回一个整数和一个整数向量。我拥有的是

cdef func() nogil:
    cdef vector[int] vect
    cdef int a_number
    ...
    return a_number, vect

但这会产生类似Assignment of Python object not allowed without gil的错误。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

Cython具有ctuple类型的http://docs.cython.org/en/latest/src/userguide/language_basics.html#types

%%cython -a -f -+
from libcpp.vector cimport vector

cdef (vector[int], double) func() nogil:
    cdef vector[int] vec
    cdef double d = 3.14
    cdef int i
    for i in range(10):
        vec.push_back(i)
    return vec, d

答案 1 :(得分:0)

您需要返回一个C ++结构:一个结构,一个向量,一个std :: pair等,而不是python元组对象。