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

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

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

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

  • Как сбросить «историю» NavigatonToolbar при повторной печати данных на одной оси?
  • Как обновить сюжет с помощью python и Matplotlib
  • Лучший способ получить название кнопки, которая называется событием?
  • Как проверить, является ли ОС Vista в Python?
  • Slim down Python wxPython OS X приложение, построенное с помощью py2app?
  • Как нарисовать индикатор выполнения wxPython
  • wxPython: хороший способ наложить wx.Panel на существующую wx.Panel
  • Получение элемента панели WxPython для расширения
  • 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 .

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

    Interesting Posts

    Преобразование python dict в строку и обратно

    Пользовательская функция Python с использованием roll_apply для pandas

    Как получить текущее использование ЦП и ОЗУ в Python?

    Получить значение указателя Cython

    Использование python для фильтрации файлов на диске

    Добавление второго экземпляра Firefox с помощью Marionette (порт изменения)

    wxPython: Может ли wx.PyControl содержать wx.Sizer?

    Как проверить, является ли строка числом (float)?

    Как выбрать точку в подзаголовке и выделить ее в смежных подзаговорах в matplotlib (расширение до области точек)

    Преобразование unicode с помощью строки utf-8 в качестве содержимого для str

    настраиваемые URL-адреса с использованием рамки django rest

    python gtk loop ascii spinner

    Почему вызов entry.get () дает мне «недопустимое имя команды»?

    Динамическое поле выбора с использованием WTForms, не обновляющего

    Можно ли создать шаблон регулярного выражения Python для соответствия и замены символов Unicode, отличных от ASCII?

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