Thread не выходит из цикла в функции customtkinter и продолжает работу

Недавно начал разбираться в threading и его работе с customtkinter. Чтобы не зависало окно, запустил долгое выполнение кода в отдельный Thread:

    def start_cmd(self):
    time_start = time.time()
    self.set_states()
    if os.path.exists("logs"):
        pass
    else:
        os.mkdir("logs")
    file_name = f"logs\\scan_{time.strftime('%d_%m_%Y_%H_%M_%S')}.txt"
    open(file_name, "w", encoding="utf-8").close()
    print("Создаю тред")
    thread = threading.Thread(target=self.start_, args=(file_name,))
    thread.start()
    self.check_thread_start(thread, time_start, file_name)

Сам код выполняемой функции таков:

    def start_(self, file_name):
    if (self.vid is not None) and self.real_port:
        photo_count = 0
        if self.checkbox_save.get():
            dir_to_photo = filedialog.askdirectory(title="Выберите путь для сохранения фото")

        if self.checkbox_pred.get():
            if self.same_folder:
                self.dir_to_save_preds = dir_to_photo
            else:
                self.dir_to_save_preds = filedialog.askdirectory(title="Выберите путь для сохранения предсказаний")
            model = YOLO(
                "C:\\best.pt")

        self.real_port.write(b'0')  # start

        if self.real_port.read() != b'r':
            print("ALERT R")
            print("await ready")

        file = open(file_name, "a", encoding="utf-8")
        file.write("\nУспешный старт")

        print("Захожу на цикл")
        while photo_count <= 11*29:
            print(photo_count)
            _, frame = self.vid.read()
            cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

            file.write(f"\nФотография_{photo_count}_{time.strftime('%H_%M_%S')}:Успешно")

            if self.checkbox_save.get():
                cv2.imwrite(f"{dir_to_photo}\\images\\{photo_count}.jpg", cv2.flip(cv2image, 1))

            if self.checkbox_pred.get():
                preds = model(source=cv2image, save=False, show=False, conf=0.5, verbose=False)
                #preds.save_txt(f"{self.dir_to_save_preds}\\preds{photo_count}.txt", save_conf=True)
                with open(f"{self.dir_to_save_preds}\\labels\\{photo_count}.txt", "w") as ff:
                    for pred in preds:
                        boxes = pred.boxes
                        for box in boxes:
                            if box.cls.nelement() and box.xywh.nelement():
                                ff.write(f"{box.cls} {box.xywh[0]}")

            if self.real_port.read() != b'w':
                print("AWAIT WAIT")
            photo_count += 1
            if photo_count != 11 * 29:
                self.real_port.write(b'116')
            else:
                file.close()
    else:
        print("Не подключена камера или Ардуино")
        file = open(file_name, "a", encoding="utf-8")
        file.write("Не подключена камера или Ардуино")
        file.close()
    print("Выхожу из цикла")

Функция запускается, заходит на цикл, но не выходит из него, проверка thread.is_alive() пишет True. Если запускать без подключённых ардуино или камеры тред завершает работу и проходит до конца функции. Вывод программы(сокращённый):

"Создаю тред
Захожу на цикл
0
1
2
...
307
308
   "<--- пустая строка

Что это может быть?


Ответы (0 шт):