问题描述
- 使用Pyside2或Pyside6开发的软件,通过Pyinstaller打包成exe程序,运行程序后,若软件中使用了子线程进行不断的循环操作,那么通过点击软件右上方自带的窗口关闭按钮,能够关闭软件,但无法结束后台相关的进程。
解决方案
from threading import Thread
"""创建子线程时,设置守护线程"""
task = Thread(target=func, args=(xxx, xxx, ...), deamon=True)
task.start()
***说明:*该方案不能解决所有情况,添加守护线程之后,关闭关键可能无法结束所有进程
def closeEvent(self, event):
# 这是窗口关闭事件的重载方法
# 在这里添加你想要执行的关闭相关事件的代码
self.stop_app()
def stop_app(self):
"""相关的事件,如:释放所有摄像头,等待子线程全部终止,释放线程"""
for cap in caps:
cap.release()
for j in tasks:
j.join()
通过重载窗口关闭事件,添加相关的功能函数(子线程终止函数),能够终止该软件后台所有相关的进程,避免一直占有系统资源