Почему Parallel Python работает так, как работает? - PullRequest
3 голосов
/ 02 ноября 2010

В Parallel Python, почему необходимо обернуть все модули, которые понадобятся передаваемой функции, вместе с переменными и пространствами имен в этом вызове отправки задания - насколько необходимо сохранить «глобальные» переменные уровня модуля?(если это все, что происходит)

функция отправки:

submit(self, func, args=(), depfuncs=(), modules=(), callback=None, callbackargs=(),group='default', globals=None)
    Submits function to the execution queue

    func - function to be executed
    args - tuple with arguments of the 'func'
    depfuncs - tuple with functions which might be called from 'func'
    modules - tuple with module names to import
    callback - callback function which will be called with argument 
        list equal to callbackargs+(result,) 
        as soon as calculation is done
    callbackargs - additional arguments for callback function
    group - job group, is used when wait(group) is called to wait for
    jobs in a given group to finish
    globals - dictionary from which all modules, functions and classes
    will be imported, for instance: globals=globals()

1 Ответ

3 голосов
/ 03 ноября 2010

Причина, по которой pp работает так, как он работает, заключается в том, что он создает свежий экземпляр интерпретатора Python для каждого работника, который полностью независим от всего, что выполнялось до или после.Это гарантирует отсутствие непреднамеренных побочных эффектов, таких как __future__ импорт, активный в рабочем процессе.Проблема в том, что все становится намного сложнее понять, и, по моему опыту с pp, не особенно надежно.pp пытается немного упростить задачу для пользователя, но, похоже, создает больше проблем, чем решает его усилия.

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

...