PySide 中关闭线程的正确方法

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

我目前正在使用 PySide6 设计一个软件,该软件连接到 3 个电子元件/仪器以同时获得各种科学读数。 我使用PySide6的线程功能来实现各个组件的并行工作。 我正在使用此模板来设计我的线程(https://stackoverflow.com/a/33453124/5959601)。

但是,我对如何关闭每个线程有点困惑。目前,我使用以下语句:

self.thread.deleteLater()
self.worker.deleteLater()

这是正确的方法吗? (注意:线程正在停止,我还没有遇到任何问题)

pyqt pyside pyside6
1个回答
0
投票

QThread
有一个
.terminate()
方法会停止执行,但通常应该避免。

来自文档

警告

此功能很危险,不鼓励使用。线程可以 在其代码路径中的任何点终止。线程可以被终止 修改数据时。线程没有机会清理 在其自身之后,解锁任何持有的互斥体等。简而言之,使用这个 仅在绝对必要时才起作用。

因此,更常见的是为线程编写目标函数来定期检查主线程修改的标志,并在需要时优雅地退出。

对于标准Python线程,我通常使用一个简单的

threading.Lock
,它以锁定状态启动,并在线程应该退出时解锁。线程通过尝试获取该锁(无需等待)来定期检查该锁,如果成功,则线程执行清理并退出。

QThread
似乎以函数的形式为此提供了某种预先构建的解决方案:
QThread.requestInterruption
QThread.isInterruptionRequested

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