Почему параллельный Python работает так, как он делает?
-
28-09-2019 - |
Вопрос
В параллельном 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()
Решение
Причина этого pp
Работает так, как он делает, заключается в том, что он делает свежий экземпляр интерпретатора Python для каждого работника, который полностью независим от всего, что запускается до или с. Это гарантирует, что нет непреднамеренных побочных эффектов, таких как __future__
Импорт активен в рабочем процессе. Проблема с этим заключается в том, что это делает все более сложнее, чтобы получить право, а в моем опыте pp
, не особенно крепкий. pp
делает Попробуйте сделать вещи немного проще для пользователя, но, похоже, введет больше проблем, чем решает в его усилиях по этому поводу.
Если бы я должен был написать код, который был разработан для использования в кластере с самого начала, я бы, вероятно, в конечном итоге использую pp
, но я обнаружил, что адаптация существующего кода для работы с pp
это кошмар.