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

问题描述 投票:1回答:2

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

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

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

python cython
2个回答
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

0
投票

你需要返回一个C ++结构:一个struct,一个vector,一个std :: pair等,而不是一个python tuple对象。

© www.soinside.com 2019 - 2024. All rights reserved.