【问题标题】:How to stop a Thread - Python 3如何停止线程 - Python 3
【发布时间】:2016-11-16 07:16:34
【问题描述】:

大家好,我正在努力尝试停止线程,我没有收到任何错误,但我的线程并没有停止。我会很感激一些帮助。我有一个调用我的函数 lev 的按钮,当我关闭按钮时它应该停止线程。按照下面的代码部分:

exitFlag = 0

def levt():

    print("Executando")
    while ((app.frames[Acionamento].var.get()==2) and exitFlag==0):
        print("o thread")
        t1fvm = time.time()  #Tempo final luminária esquerda
        n1mv = (t1fvm-t1ivm)*0.6
        global levm
        levm = levm+n1mv
        print(levm)




def lev():

    app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.label6["text"] = "Luminária A"
    global exitFlag
    global thread2
    thread2 = Thread(target=levt)    
    if GPIO.input(17):
        GPIO.output(17, GPIO.LOW)
        app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.lev_button["text"]="Desligado"
        if thread2.isAlive():
            exitFlag = 1

    else:
        global t1ivm
        t1ivm = time.time()   
        GPIO.output(17, GPIO.HIGH)
        app.frames[Acionamento].esquerdaFrame.vendasFrame.luminaria_esquerdaFramev.lev_button["text"]="Ligado"
        thread2.start()

【问题讨论】:

    标签: multithreading python-3.x tkinter


    【解决方案1】:

    由于thread2 总是由lev() 中的新线程启动,所以if thread2.isAlive() 将始终被评估为FalseexitFlag 永远不会设置为1。因此,正在运行的线程将永远不会停止。

    thread2 = Thread(target=levt)移动到thread2.start()之前的行:

    def lev():
        ...
        #thread2 = Thread(target=levt)  # moved to line before thread2.start()
        if GPIO.input(17):
            ...
        else:
            ...
            thread2 = Thread(target=levt)
            thread2.start()
    

    【讨论】:

    • 谢谢 ACW,我明白了,解决了。还有一个问题如何将秒转换为小时:分钟:秒?
    • secondstime.time()返回的值吗? Hours:Minutes:Seconds是表示seconds的时间还是经过的时间?
    • time.time() 返回秒还是太接近了吧?可以举个例子吗?
    • seconds 表示为时间:time.strftime('%H:%M:%S', time.localtime(seconds))。要获取seconds经过时间'{}:{}:{}'.format(seconds//3600, seconds//60%60, seconds%60)
    • 感谢 ACW,我试图将我从 time.time() 获得的时间表示为经过的时间(秒),但我会得到类似 0.0:0.0:0.0 的 0:0:0 的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2022-11-21
    • 2014-05-29
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多