multiprocessing.Pool не дожидаться завершения процесса и проверка существования процесса

рабочее окружение tkinter, внем запущен таймер который выводится в окно, и параллельно должен происходить другой процесс, но окно зависает и плюс не могу проверить жив ли процесс через какое-то время.

from tkinter import *
from multiprocessing import Pool
from functools import partial

from cheker import che

class main(Frame):
    def __init__(self, master):
        super().__init__(master)
        root.title('test')

        self.lbltimer = 3
        self.lblTime = Label(root, text='Timer: '+str(self.lbltimer)+' min')
        self.lblTime.grid(row=0, column=0, sticky=W + E, padx=(5, 5), pady=(5, 5))
        self.starts()

    def starts(self):
        self.temp = self.lbltimer * 60
        self.lblTime.config(text='Timer: '+str(round((self.temp/60),2))+' min')
        root.update()
        self.after(1000, self.timers)

        self.pool = Pool(1)
        self.ress = self.pool.starmap(che, zip('a', 'b')) #как сделать чтоб процесс не зависал? (функция вызываемая в другом скрипте, вычисления)
        #self.pool.close()
        #self.pool.join()
        self.after(1000, self.waiters)

    def timers(self):
        self.temp -= 1
        self.lblTime.config(text='Timer: ' + str(round((self.temp / 60), 2)) + ' min')
        root.update()
        if self.temp > 0:
            self.after(1000, self.timers)
        else:
            self.lblTime.config(text='Timer: 0 - wait')
            root.update()

    def waiters(self):
        if self.pool.is_alive(): #как проверить живой ли процесс?
            self.after(5000, self.waiters) 
        else:
            res = ''
            for re in self.ress:
                res += re+'\n'
            print(res)

мне нужен асинхронный процесс, который даст вывод результата, но при этом не трогать вызываемый другой скрипт (не менять его), в нем написано возвращение результата через return. По этому я пробую Pool, но процесс дает зависание процессов в tkinter и не знаю как проверить когда процесс завершился, чтобы я мог продолжить работу с результатом.


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