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

Вы можете использовать значения объекта collections.Counter, созданного из списка:

from collections import Counter
l = ['Cats', 'Dogs', 'Cows', 'Cows', 'Cows', 'Sheep', 'Dogs', 'Sheep']
print(list(Counter(l).values()))

Это выводит:

[1, 2, 3, 2]
12
задан Ram Rachum 8 April 2009 в 15:55
поделиться

4 ответа

Я бы использовал 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
7
ответ дан 2 December 2019 в 19:32
поделиться

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

7
ответ дан 2 December 2019 в 19:32
поделиться

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

0
ответ дан 2 December 2019 в 19:32
поделиться

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

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

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

4
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: