首页 > 解决方案 > 如何在python中停止continuous_threading

问题描述

我正在做一个项目,我必须从串口读取值并将它们显示在 tkinter GUI 上。我正在使用python的连续线程模块。我正在使用一个连续线程在每 0.5 秒后连续读取串行端口上的数据,但现在我想停止这个连续线程。那么我应该如何阻止它呢?
这是按下检查按钮时我正在调用的函数

def scan():
    print("in scan")
    btn1_state = var1.get()
    print("Scan: %d"%btn1_state)
    t1 = continuous_threading.PeriodicThread(0.5, readserial)
    if(btn1_state == 1):
        t1.start()
    else:
        print("entered else ")
        t1.stop()  #I am using stop() but the thread doesn't stop

请帮忙

标签: pythonmultithreadingtkinterpython-multithreadingpyserial

解决方案


问题很可能是您在函数中使用了阻塞读取readserial函数。它需要超时。我可以用这段代码重现:

import time
import continuous_threading


time_list = []

def save_time():
    while True:
        time.sleep(1)
    time_list.append(time.time())

th = continuous_threading.PeriodicThread(0.5, save_time)
th.start()

time.sleep(4)
th.join()

print(time_list)

这永远不会退出。

例子修改。

由于 Continuous_threading 期望它的事件循环处于控制之中,所以它永远不会到达停止事件。


推荐阅读