Форум сайта python.su
Прога состоит из двух файлов: main.py и net.py
В первом файле реализован интерфейс. Можно вводить значения параметров через spinbox, textedit, combobox и т.д.
Во втором файле реализована нейронная сеть на основе библиотеки keras, которая принимает параметры из файла main.py.
В интерфейс я добавил кнопку “Запуск”, которая запускает обучение модели сети, то есть те функции, которые есть в net.py.
Обучение идет долго, минут 30-50, в течение которых в консоли нейросеть выдает сообщения о каждом выполненном шаге с указанием ошибки обучения, вот так:
epoch 1/100, metrics =
epoch 2/100, metrics =
…
epoch 100/100, metrics =
Если в это время даже просто щелкнуть по окну программы с интерфейсом, окно зависает (не отвечает). По сути, имеем большой косяк.
Чтобы не выводить обучение (исполнение файла net.py) в отдельный поток, я хочу при нажатии на кнопку “Запуск” выводить модальное окно. Если я правильно думаю, это должно убрать подобный конфликт, так как главное окно будет недоступно, пока модальное не закроешь. Или нет?
В модальном окне хочу выводить те самые сообщения из консоли.
Если надо будет прервать обучение, то можно будет нажать на кнопку “стоп” в модальном окне.
Если обучение завершено, надо как-то вывести диалоговое окно с соответствующим сообщением.
Подскажите, пожалуйста, как можно реализовать такое модальное окно. Пишу на pyqt5
Или другие идеи. Заранее спасибо!
Отредактировано Artur87 (Янв. 18, 2018 14:11:10)
Офлайн
> Или нет?
Нет. Процесс обучения должен работать в отдельном потоке, в основное окно информация должна передаваться при помощи сигналов.
Офлайн
1) надо все содержимое исполняемых функций файла net.py заключить в поток?
2) а как выводить сообщения, которые формирует нейросеть? При помощи каких команд, функций?
Офлайн
1) Все тяжёлые функции должны быть вынесены в отдельный поток, иначе будет блокирован GUI
2) Вот пример передачи сообщений между потоками. У тебя будут сигналы нового стиля, но принцип тот-же.
http://python.su/forum/topic/24662/?page=2#post-130903
Офлайн
Спасибо!
Офлайн