Форум сайта python.su
Всем привет!
Есть некоторые функции обработки изображений, которые занимают приличное время. Необходимо реализовать параллельность. Потоки сразу отбрасываются, всему виной GIL. Пытаюсь подружить wxPython и multiprocessing. Взял за основу http://wiki.wxpython.org/LongRunningTasks и сделал то же самое, только с процессами. Все хорошо, gui на время выполнения процесса не зависает.
То есть примерно так:
class WorkerProcess(multiprocessing.Process): def __init__(self, *args, **kwargs): multiprocessing.Process.__init__(self, *args, **kwargs) self.start() def run(self): result = my_fuction() - тут функция обработки.
RUN = 0 class WorkerPool(multiprocessing.pool.Pool): Process = WorkerProcess def __init__(self, *args, **kwargs): multiprocessing.pool.Pool.__init__(self, *args, **kwargs) def map(self, func, iterable, chunksize=None): assert self._state == RUN return self.map_async(func, iterable, chunksize)
Отредактировано Levelup (Окт. 31, 2012 19:26:40)
Офлайн
Все оказалось намного проще. Решил проблему с помощью callback функции.
pool.apply_async(dark_frame_correction, [[img, path]], callback=self.OnProccessingResult)
Отредактировано Levelup (Ноя. 1, 2012 06:43:36)
Офлайн