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
"<--- пустая строка
Что это может быть?