Найти - Пользователи
Полная версия: wxPython и Multiprocessing.
Начало » GUI » wxPython и Multiprocessing.
1
Levelup
Всем привет!

Есть некоторые функции обработки изображений, которые занимают приличное время. Необходимо реализовать параллельность. Потоки сразу отбрасываются, всему виной 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() - тут функция обработки. 
 
Но, дело в том, что при создании нового процесса функция обработки инициализирует одну библиотеку, что сильно замедляет работу. Поэтому пытаюсь реализовать все это с помощью multiprocessing.Pool, чтобы один раз проинициализировать библиотеку, а после просто вызывать необходимые функции. И тут появляются проблемы, при вызове функций map или apply GUI зависает.
Может кто-то уже реализовывал подобное?


Выдрал из исходников, пытался как-то запустить из созданного процесса, ничего не выходит. Помогите, пожалуйста.

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
Все оказалось намного проще. Решил проблему с помощью callback функции.

pool.apply_async(dark_frame_correction, [[img, path]],
                         callback=self.OnProccessingResult)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB