Python threading 子进程无法强制关闭 已setDaemon(True)

使用了Python thread 写了一个小程序。

希望:在程序运行期间,若强关软件,所有子进程需要停止执行。

但是即使使用了setDaemon(True),依旧无法停止进程。Print依旧在跑。这是为何?

代码如下:


# -*- coding: utf-8 -*- 

'''

    【简介】

    PyQT5中 QTimer例子 改版

 

  

'''

import string, threading, time

import sys

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

    

global sec

sec=0

global stoptimer

stoptimer=False



def run123():

    for i in range(100000):

        print(i)

    global stoptimer

    stoptimer=True

    print(stoptimer)

    return 



def countTime():

    global  sec

    sec += 1

    # LED显示数字+1

    lcdNumber.display(sec)          



def work():

    # 计时器每秒计数

    timer.start(1000)

    global stoptimer

    t1 = threading.Thread(target=run123, args=())

    t1.setDaemon(True)

    t1.start()

    t2 = threading.Thread(target=timeStop, args=())

    t2.setDaemon(True)

    t2.start()



def timeStop():

    global stoptimer

    while stoptimer==False:

        time.sleep(1)

    timer.stop()

    print("运行结束用时",lcdNumber.value())

    global sec

    sec=0



if __name__ == "__main__":      

    app = QApplication(sys.argv) 

    top = QWidget()

    top.resize(300,120)

    

    # 垂直布局类QVBoxLayout

    layout = QVBoxLayout(top) 

    # 加个显示屏    

    lcdNumber = QLCDNumber()             

    layout.addWidget(lcdNumber)

    button = QPushButton("测试")

    layout.addWidget(button)



    timer = QTimer()

    button.clicked.connect(work)

    # 每次计时结束,触发 countTime

    timer.timeout.connect(countTime)      



    top.show()

    sys.exit(app.exec_())