Параллельная петля внутри потока в Ткинтере - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю графический интерфейс Tkinter, в котором я обрабатываю несколько изображений.Каждый процесс занимает много времени и включает в себя использование функции Parallel.Очевидно, он перегружает графический интерфейс, поэтому я хочу поместить процессы в отдельный поток, чтобы обновить список изображений и узнать, какие изображения уже были обработаны, а какие находятся в процессе, как показано на рисунке:

enter image description here

Таким образом, при нажатии кнопки «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

Это означает, что каждый параллельный цикл не может использовать все процессоры, и процесс намного медленнее.

Есть ли у вас какое-либо решение?

Заранее спасибо

...