Cython с pyqt-сигналом - PullRequest
       14

Cython с pyqt-сигналом

0 голосов
/ 27 апреля 2020

Я пытаюсь использовать параллельный Cython для запуска дорогой функции. Я хотел включить сигнал в класс. как показано ниже:

cdef class A(QObject):

    finish=pyqtSignal(float)

    def counter(self, int count): # define the type of input

        # Define all variables
        cdef int x = 0
        cdef int i
        for i in prange (count, schedule='dynamic', nogil=True):
            if i>=5000000: # capture any error
                x=100
            else:
                x += i
                self.finish.emit(i)
        return x

Но возникает ошибка: я не могу использовать QObject с Cython. Может кто-нибудь покажет мне, как использовать cython и pyqt вместе.

1 Ответ

0 голосов
/ 27 апреля 2020

https://cython.readthedocs.io/en/latest/src/userguide/extension_types.html#subclassing

Если тип расширения наследует от других типов, первый базовый класс должен быть встроенным типом или другим типом расширения

Что касается Cython, то QObject является загадочным Python классом, и поэтому вы не можете наследовать от него в cdef class (он, вероятно, также не будет работать как второй или последующий базовый класс, потому что он в конечном счете написано на C / C ++, а множественное наследование таких классов практически * ограничено в Python).

Вместо этого A следует сделать обычным (не cdef) классом.


Кроме того, для испускаемого Python символа почти наверняка потребуется GIL, поэтому вы не сможете сделать это (эффективно) в вашем prange l oop.

...