我有一些PyQt5 python代码,可以下载一组文件。我正在使用multiprocessing.dummy作为线程的包装,并使用apply_async获得同时下载。 我想从我的线程函数中更新主GUI中的进度条,但是当我这样做时,QT为信号选择一个排队的连接,并且主线程中播放下载文件的函数开始(已下载文件) ),然后,进度栏会突然更新,将文件报告为下载,即使它们之前已经下载了一段时间。
如果我使用Qt.DirectConnection创建信号,则会得到所需的行为,但是在下载文件后,我会遇到段错误,并且主线程退出。我确定肯定有某种方法可以解决此问题,因为这不是一项不寻常的任务,但是尝试了互斥,信号到信号以及其他多种尝试之后,我几乎要扯掉头发了。我相信答案很明显。
对于类似的问题,我在这里已经阅读了其他答案,但没有什么特别启发性的。
建议从创建的线程内部进行连接,但是我不愿意尝试此操作,因为该线程是在一个类中创建的,该类在主线程中被组合成一个自定义对象,并且我真的不想传递引用层次结构。如果我必须这样做,但是我尝试改为在线程函数内部连接一个信号,以在类中调用该方法,然后调用该信号,但是没有运气,结果还是一样。
非常感谢。
答案 0 :(得分:0)
我最终发现段错误是由我在调用thread_pool.apply_async之后从主线程加入线程池引起的。我删除了close和join语句,并且信号上的directconnection正常工作,符合预期。我继续收到警告:
QObject::setParent: Cannot set parent, new parent is in a different thread
但是程序运行正常。 谢谢!