在Cython cdef类中定义自定义类

时间:2019-12-06 16:41:19

标签: python collections cython

这个问题与我以前的问题(Safe writing to variable in cython c wrapper within two python processes or distinct memory for python processes

有关

我具有从collections.deque继承的自定义类,并具有其他一些逻辑:

from collections import deque
from threading import Lock

class DequeWithLock(deque):
    def __init__(self, iterable=(), maxlen=None):
        super().__init__(iterable, maxlen)
        self.lock = Lock()

    def safe_append(self, data):
        try:
            self.lock.acquire()
            self.append(data)
        finally:
            self.lock.release()

我也有某种名为“ SubscriptionClass”的“主要” cdef类。奇怪的是,如果我按如下所示编写此类,则一切正常:

from dxpyfeed.wrapper.utils.data_class import DequeWithLock as deque

cdef class SubscriptionClass:
    cdef dict data

    def __init__(self):
        self.data = dict()
        self.data['data'] = deque()

此代码按预期工作,甚至Lock()也按预期工作。但是,我想摆脱不必要的dict定义,因此我通过以下方式重写代码:

cdef class SubscriptionClass:
    cdef object data

    def __init__(self):
        self.data = deque()

但是,每次在另一个线程中启动的Cython函数尝试使用SubscriptionClass.data并且没有任何元素附加到双端队列时,都会向我抛出一条消息。消息:Exception ignored in: 'path.to.cython.function'

我还尝试从(Mixing cdef and regular python attributes in cdef class)中添加cdef dict __dict__,但这使我死定了。

0 个答案:

没有答案