Почему 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
это кошмар.