我目前正在使用 PySide6 设计一个软件,该软件连接到 3 个电子元件/仪器以同时获得各种科学读数。 我使用PySide6的线程功能来实现各个组件的并行工作。 我正在使用此模板来设计我的线程(https://stackoverflow.com/a/33453124/5959601)。
但是,我对如何关闭每个线程有点困惑。目前,我使用以下语句:
self.thread.deleteLater()
self.worker.deleteLater()
这是正确的方法吗? (注意:线程正在停止,我还没有遇到任何问题)
QThread
有一个 .terminate()
方法会停止执行,但通常应该避免。
来自文档:
警告
此功能很危险,不鼓励使用。线程可以 在其代码路径中的任何点终止。线程可以被终止 修改数据时。线程没有机会清理 在其自身之后,解锁任何持有的互斥体等。简而言之,使用这个 仅在绝对必要时才起作用。
因此,更常见的是为线程编写目标函数来定期检查主线程修改的标志,并在需要时优雅地退出。
对于标准Python线程,我通常使用一个简单的
threading.Lock
,它以锁定状态启动,并在线程应该退出时解锁。线程通过尝试获取该锁(无需等待)来定期检查该锁,如果成功,则线程执行清理并退出。
QThread
似乎以函数的形式为此提供了某种预先构建的解决方案:QThread.requestInterruption
和QThread.isInterruptionRequested
。