Асинхронное ожидание завершения второстепенного процесса

Рейтинг: 0Ответов: 0Опубликовано: 07.07.2023

Есть главная функция def start(), есть функция расчета в другом скрипте def learning() (она вызывается из функции def first() через multiprocessing - Process) и есть функция вывода результата def finish() (она выводит результат из тхт файла полученного из функции def learning())

Мне нужно дождаться завершения расчета и вывести результат, но при этом пока ожидаю мне нельзя блокировать работу основной функции. То есть через *.join() мне не подходит, так же проверять на существование файла тхт и в случае, если да, то открыть, тоже не подходит, так как там есть условия связанные с параметрами из главной функции. Как это провернуть?

First file:

import tkinter as tk
from multiprocessing import Process
from secondFile import learning

class aigodWin(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.combo = Combobox()
        self.combo['values'] = ('1', '2')
        self.combo.current(0)
        self.combo.pack()
        self.btn = Button(text='Start', command=self.start)
        self.btn.pack()

    def start(self):
        proc = Process(target=learning)
        proc.start()
        self.finish() # как-то дождаться завершения proc не блокируя основное окно, чтобы можно было в нем что-то клацать, и только потом запустить эту функцию

    # ..... выполнение других задач

    def finish(self)
        # например условие, держущее меня основном процессе и в этом классе
        if combo.current() == 1:
            # ... вывод результата из тхт файла
            print('FINISH')
        else:
            print('Finish2')

if __name__ == "__main__":
    window = tk.Tk()
    app = Win(window)
    window.mainloop()

SecondFile:

def learning():
    #......расчет и запись результата в тхт файл
    print('LEARNING')

Ответы

Ответов пока нет.