如何在没有gil(nogil)的情况下在cython cdef中返回两个值

Mr.*_*ysl 4 python cython

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

cdef func() nogil:
    cdef vector[int] vect
    cdef int a_number
    ...
    return a_number, vect
Run Code Online (Sandbox Code Playgroud)

但这会产生像Assignment of Python object not allowed without gil. 有解决方法吗?

oz1*_*oz1 7

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
Run Code Online (Sandbox Code Playgroud)


ev-*_*-br 0

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