Python QtCore.qunnable原因SIGSEV(PyQt5)

Python QtCore.qunnable原因SIGSEV(PyQt5),python,pyqt5,python-multithreading,Python,Pyqt5,Python Multithreading,我正在尝试使用PyQt5在不同的线程中运行进程,以避免阻塞UI线程(主线程) 我创建了QtCore.QRunnable和QObject类的子类,将我的函数传递给线程池,并希望通过使用信号获得run函数的结果。 在我的主UI中,我创建了worker并将其连接到回调,然后启动worker。 在本例中,fn不执行任何操作,回调只打印值。 当我运行此代码时,它会崩溃,并显示以下消息: 过程结束,退出代码139(被信号11:SIGSEGV中断) 我做错了什么,如何连接到worker以接收函数的返回值而不破

我正在尝试使用PyQt5在不同的线程中运行进程,以避免阻塞UI线程(主线程)

我创建了QtCore.QRunnable和QObject类的子类,将我的函数传递给线程池,并希望通过使用信号获得run函数的结果。 在我的主UI中,我创建了worker并将其连接到回调,然后启动worker。 在本例中,fn不执行任何操作,回调只打印值。 当我运行此代码时,它会崩溃,并显示以下消息:
过程结束,退出代码139(被信号11:SIGSEGV中断)

我做错了什么,如何连接到worker以接收函数的返回值而不破坏代码或UI? ,但它只是关于QThreads,而不是QRunnable,因为QRunnable在aik中的功能不同

from PyQt5.QtWidgets import  QMainWindow, QApplication
from PyQt5 import QtCore
import sys

class Worker(QtCore.QRunnable, QtCore.QObject):
    trigger = QtCore.pyqtSignal(int)

    def __init__(self, function, *args, **kwargs):
        super().__init__()
        self.function = function
        self.args = args
        self.kwargs = kwargs

    @QtCore.pyqtSlot()
    def run(self):
        self.function(*self.args, **self.kwargs)
        self.trigger.emit(1)


class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Title")
        self.threadpool = QtCore.QThreadPool()
        self.show()
        self.run_fn()

    def test_fn(self, i=0):
        return i

    @QtCore.pyqtSlot()
    def test_callback(self, i):
        print(i)

    def run_fn(self):
        worker = Worker(self.test_fn, 1)
        worker.trigger.connect(self.test_callback)
        self.threadpool.start(worker)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Window()
    sys.exit(app.exec_())

当然我重新编排了问题的格式。谢谢你提供@eyllanesc的链接。你能解释一下为什么代码会抛出SIGSEGV吗?我没有将多重继承问题与该错误联系起来,也没有走得那么远。PyQt有很多限制,其中QObject和QRunnable之间不能存在多重固有属性(PyQt只允许在某些情况下使用它们),因此,即使您想这样做,某些事情最终也不会被构建(对于某些非常重要的变量,它不是保留内存),但您尝试使用它的某些方法来访问未分配的内存,从而导致该众所周知的错误。