python - Cython 中的这个声明是什么? cdef PyObject ** worker 。它是指向指针的指针吗?

标签 python c++ cython

我正在尝试利用此 sample code 中的概念并行运行一些 Cython 代码,但我似乎无法在 Cython 文档中找到有关此表示法实际含义的任何信息。

    cdef FLOAT_t[:] numbers
    cdef unsigned int i
    cdef INDEX_t n_workers
    cdef PyObject **workers
    cdef list ref_workers #Here to maintain references on Python side
    
    def __init__(Parent self, INDEX_t n_workers, list numbers):
        cdef INDEX_t i
        self.n_workers = n_workers
        self.numbers = np.array(numbers,dtype=float)
        self.workers = <PyObject **>malloc(self.n_workers*cython.sizeof(cython.pointer(PyObject)))
        
        #Populate worker pool
        self.ref_workers = []
        for i in range(self.n_workers):
            self.ref_workers.append(Worker())
            self.workers[i] = <PyObject*>self.ref_workers[i]
    
    def __dealloc__(Parent self):
        free(self.workers)

**符号意味着它是一个指向 PyObject 指针的指针?我知道 <>符号是为了取消引用指针,这一行也是如此:

self.workers = <PyObject **>malloc(self.n_workers*cython.sizeof(cython.pointer(PyObject)))

分配未知数量的内存,因为 PyObject 的大小在 self.workers 之前是未知的充满了取消引用的 PyObjects?

最佳答案

它不仅是指向 PyObject* 指针的指针,还是指向 PyObject* 指针数组的第一个元素的指针。

你可以看到它正在分配内存以容纳 self.n_workers,大概这些 worker 是使用 PyObject 衍生物实现的,所以在内存中你将有:

self.workers -> self.workers[0] (PyObject* for 1st worker)
                self.workers[1] (PyObject* for 2nd worker)
                ....
                self.workers[N-1]  (PyObject* for last worker)

关于python - Cython 中的这个声明是什么? cdef PyObject ** worker 。它是指向指针的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63755565/

相关文章:

c++ - 更好地解释数组

python - Cython 无法在 Windows 7 x64 上编译

python - 在数据框列 pandas 上应用条件

python - 如何在 Python 中执行等效的 Excel INDEX MATCH

python - 如何将\x22之类的字符转换成字符串?

python - 如何在 feedparser (Python) 中解析多个 URL?

c++ - 成员右值引用和对象生命周期

C++类实例化理论

python - Joblib Parallel + Cython 永远挂起

python - 混合 Cython 类和 SqlAlchemy