Как остановить непрерывную потоковую обработку в python

#python #multithreading #tkinter #python-multithreading #pyserial

Вопрос:

Я работаю над проектом, в котором я должен считывать значения с последовательного порта и отображать их в графическом интерфейсе tkinter. Я использую модуль непрерывной потоковой передачи 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
 

Пожалуйста, Помогите

Ответ №1:

Проблема, скорее всего, в том, что вы используете функцию блокировки чтения в своей 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 ожидает, что цикл событий будет находиться под контролем, он никогда не доходит до события остановки.