当连接类型= Qt.DirectConnection时,来自线程对象的PyQt5信号会导致段错误

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

我有一些PyQt5 python代码,可以下载一组文件。我正在使用multiprocessing.dummy作为线程的包装器,使用apply_async来获取同时下载。从我的线程函数我想更新主gui中的进度条,但是当我这样做时,QT为信号选择一个排队连接,并且主线程中与下载文件一起播放的函数启动(已下载的文件) ),然后,突然,进度条更新报告文件下载,即使他们已经下载了一段时间。

如果我用Qt.DirectConnection创建信号,我得到了所需的行为,但是在文件下载后我得到一个段错误,主线程退出。我确信必须有一些处理这个问题,因为这不是一个不寻常的任务,但尝试了互斥,信号和其他一些尝试,我几乎撕裂了我的头发。我确信答案很明显。

我在这里读到了其他答案,类似的问题,但没有什么特别启发。

PyQt5 Signals and Threading

建议从创建的线程内部进行连接,但是我不喜欢尝试这个,因为线程是在一个被合成到主线程中的自定义对象的类中创建的,我真的不想传递一个引用。层次结构。如果我不得不这样想,但是我尝试将螺纹函数内部的信号连接到类中调用方法然后调用信号,但没有运气,只有相同的结果。

提前谢谢了。

python multithreading pyqt pyqt5
1个回答
0
投票

我最终发现segfault是由我在调用thread_pool.apply_async后从主线程加入线程池引起的。我删除了close和join语句,并且信号的直接连接工作正常,正如预期的那样。我继续得到警告:

QObject::setParent: Cannot set parent, new parent is in a different thread

但该计划按预期运作。谢谢!

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