Python / wxPython: непрерывная работа в фоновом режиме

Я делаю программу для запуска моделирования в Python с интерфейсом wxPython. В программе вы можете создать симуляцию, и программа отобразит (= вычисляет) ее для вас. Иногда рендеринг может быть очень трудоемким.

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

Как запустить функцию рендеринга?

  • Хороший wxpython GUI builder?
  • Показать другое окно wxpython?
  • Каковы существующие разработчики Python WxWidgets с открытым исходным кодом?
  • Создание файла .exe Python: ошибка ошибки py2exe
  • Каков наилучший вид графического виджета в режиме реального времени для wxPython?
  • Ошибка диалогового окна файла wxPython: отсутствует строка «|» в строке подстановочного знака!
  • Python захватывает stdout из подпроцесса по строкам
  • многопоточность с помощью wx.TextCtrl (или базового GTK +)
  • 4 Solutions collect form web for “Python / wxPython: непрерывная работа в фоновом режиме”

    Я бы использовал threading.Thread для запуска кода в фоновом режиме и wx.CallAfter для публикации обновлений в моем потоке окна, чтобы отобразить их пользователю.

     thread = threading.Thread(target=self.do_work) thread.setDaemon(True) thread.start() ... def do_work(self): # processing code here while processing: # do stuff wx.CallAfter(self.update_view, args, kwargs) def update_view(self, args): # do stuff with args # since wx.CallAfter was used, it's safe to do GUI stuff here 

    Есть небольшая информация о wiki-wxPython о давно работающих задачах, которые могут быть полезны. В основном они используют поток и wx.PostEvent для обработки связи между потоком и основным циклом событий wx.

    Запустите новый процесс для рендеринга в фоновом режиме и периодически проверяйте, вернулся ли он.

    Здесь вы можете найти документацию для модуля подпроцесса и модуля мультипроцесса. Как сказал Джей, многопроцессор, вероятно, лучше, если вы используете Python 2.6. Тем не менее, я не думаю, что между ними будет разница в производительности. Многопроцесс просто кажется оберткой вокруг подпроцесса, что делает некоторые вещи более легкими.

    Хотя подпроцесс / многопроцессор является стандартным способом сделать это, вы также можете взглянуть на Parallel Python .

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

    Python - лучший язык программирования в мире.