Я создаю графический интерфейс Tkinter, в котором я обрабатываю несколько изображений.Каждый процесс занимает много времени и включает в себя использование функции Parallel.Очевидно, он перегружает графический интерфейс, поэтому я хочу поместить процессы в отдельный поток, чтобы обновить список изображений и узнать, какие изображения уже были обработаны, а какие находятся в процессе, как показано на рисунке:
![enter image description here](https://i.stack.imgur.com/eQmFs.png)
Таким образом, при нажатии кнопки «Procesar» выполняется функция, аналогичная этой:
def process_perusat(self):
paths_check = []
cnt=0
for key, value in intvar_dict.items():
if value.get() > 0:
src_path = path + "/" + key
paths_check.append(src_path) #Saves the full path of each image
cnt=cnt+1
if cnt==0:
alerta_msg("There are no selected images")
else:
tkmb.showinfo("Starting process", str(cnt)+" images are going to be processed")
def proceso():
cnt=0
for paths_check_i in paths_check:
name = self.checkbutton_list[cnt].cget("text")
self.checkbutton_list[cnt].config(text=name + "(procesando)")
#...
#The image is divided in "Blocks" and each one
#will be processed in parallel by the function "slic_patches"
#...
R=Parallel(n_jobs=-1)(delayed(slic_patches)(Blocks[i]) for i in range(0,len(Blocks)))
cnt=cnt+1
t = threading.Thread(target=proceso, name = 'MainThread')
t.start()
Функция proceso()
ипоток t
позволяет, чтобы графический интерфейс не зависал.Однако возникает это предупреждение:
C:\Users\User\Anaconda3\lib\site-packages\joblib\parallel.py:705: UserWarning:
Loky-backed parallel loops cannot be nested below threads, setting n_jobs=1
Это означает, что каждый параллельный цикл не может использовать все процессоры, и процесс намного медленнее.
Есть ли у вас какое-либо решение?
Заранее спасибо