Как правильно управлять потоками?
В программе идет основной поток, далее запускается дополнительный, в котором работает GUI. Мне требуется приостановить основной поток, для того чтобы управлять ходом событий из GUI, к примеру дать основной ветке выполнения пойти дальше. Часть кода для примера:
class LogOutput(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, background="white")
self.browser_var = BooleanVar()
self.config_var = BooleanVar()
self.browser_var.set(0)
self.config_var.set(0)
self.label = Label(self, text='unchanged text', background='gray44', foreground='black')
self.browser_radio_console = Radiobutton(text='With terminal', variable=self.browser_var, value=0,
background='gray44', foreground='black')
self.browser_radio_background = Radiobutton(text='In background', variable=self.browser_var, value=1,
background='gray44', foreground='black')
self.button_browser = Button(self, text='Run browser', background='#555', foreground="#ccc",
padx="20", pady="8", font="14", command=self.change_rb_1)
self.config_radio_console = Radiobutton(text='With terminal', variable=self.config_var, value=0,
background='gray44', foreground='black')
self.config_radio_background = Radiobutton(text='In background', variable=self.config_var, value=1,
background='gray44', foreground='black')
self.button_config = Button(self, text='Run config', background='#555', foreground="#ccc",
padx="20", pady="8", font="14", command=self.change_rb_2)
self.button_visual = Button(self, text='Run visual', background='#555', foreground="#ccc",
padx="20", pady="8", font="14", command=start_visual)
self.button_start = Button(self, text='Start learning', background='#555', foreground="#ccc",
padx="20", pady="8", font="14")
self.parent = parent
self.init_ui()
def init_ui(self):
self.parent.title("Info")
self.pack(fill=BOTH, expand=1)
self.label.place(x=250, y=10)
self.button_browser.place(x=25, y=90)
self.browser_radio_console.place(x=35, y=135)
self.browser_radio_background.place(x=35, y=155)
self.button_config.place(x=235, y=90)
self.config_radio_console.place(x=240, y=135)
self.config_radio_background.place(x=240, y=155)
self.button_visual.place(x=425, y=90)
self.button_start.place(x=515, y=200)
def change_label(self, root, app):
self.label.config(text=game.get_info())
root.after(100, app.change_label, root, app)
def change_rb_1(self):
if self.browser_var.get() == 0:
self.label.config(text='with term')
os.system(browser_term)
elif self.browser_var.get() == 1:
self.label.config(text='back')
os.popen(browser)
def change_rb_2(self):
if self.config_var.get() == 0:
self.label.config(text='with term')
os.system(config_term)
elif self.config_var.get() == 1:
self.label.config(text='back')
os.popen(config)
def start_visual():
os.system(debug)
def run_gui():
root = Tk()
app = LogOutput(root)
root.geometry("400x400+2700+500")
app.change_label(root, app)
root.mainloop()
def browser_button():
time.sleep(1)
os.popen(browser)
task = threading.Thread(target=run_gui)
task.start() # тут идет ответвление доп потока под GUI
if __name__ == "__main__": # Старт. Строки будут исполняться, только если скрипт запущен с этого файла
local_dir = os.path.dirname(__file__) # Возвращение локальной директории, в которой работает скрипт
config_path = os.path.join(local_dir, "config-feedforward.txt") # Получаем путь к конфигурационному файлу NEAT
run(config_path) # Старт основной части скрипта (ТРЕБУЕТСЯ РЕАЛИЗОВАТЬ ВОЗМОЖНОСТЬ ЗАПУСКА ЭТОЙ ФУНКЦИИ ИЗ GUI)
config_path = resource.RLIMIT_STACK