¿Por qué trabajar en paralelo Python como lo hace?
-
28-09-2019 - |
Pregunta
En Python paralelo, ¿por qué es necesario envolver cualquier módulo de la función pasada tendrá que junto con las variables y los espacios de nombres en esa llamada de envío de trabajos - cuán necesario es que para preservar las variables de módulo de nivel "global"? (Si eso es todo lo que está pasando)
Función de presentar:
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()
Solución
La razón de que pp
funciona de la manera que lo hace, es que hace un nuevo ejemplo del intérprete de Python para cada trabajador, que es totalmente independiente de cualquier cosa que se ejecute antes o después. Esto asegura que no hay efectos secundarios no deseados, tales como las importaciones __future__
ser activo en el proceso de trabajo. El problema con esto es que hace las cosas mucho más complicado para hacerlo bien, y en mi experiencia con pp
, no es particularmente robusta. pp
¿Tiene a tratar de hacer las cosas un poco más fácil para el usuario, pero parece introducir más problemas de los que resuelve en sus esfuerzos para hacer eso.
Si tuviera que escribir código que fue diseñado para su uso en un clúster desde el principio, probablemente terminar con pp
, pero he encontrado que la adaptación de código existente para el trabajo con pp
es una pesadilla.