Почему Parallel Python работает так, как работает?

В 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 ответ

Решение

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

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

Другие вопросы по тегам