2010-11-02 13 views
3

En Parallel Python, pourquoi est-il nécessaire d'envelopper tous les modules dont la fonction transmise aura besoin avec les variables et les espaces de noms dans cet appel de soumission de travail - comment préserver les variables globales au niveau du module? (Si c'est tout ce qui se passe)Pourquoi Parallel Python fonctionne-t-il comme il le fait?

fonction d'envoi:

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() 

Répondre

3

La raison pour laquelle pp fonctionne comme il le fait, est que cela fait une nouvelle instance de l'interpréteur Python pour tous les travailleurs, ce qui est tout à fait indépendant de tout ce qui a fonctionné avant ou depuis. Cela garantit qu'il n'y a pas d'effets secondaires involontaires, tels que __future__ les importations étant actives dans le processus de travail. Le problème avec cela est que cela rend les choses beaucoup plus compliquées à obtenir, et dans mon expérience avec pp, pas particulièrement robuste. ppne essayer de rendre les choses un peu plus facile pour l'utilisateur, mais semble introduire plus de problèmes que cela résout dans ses efforts pour le faire.

Si je devais écrire du code qui a été conçu pour être utilisé sur un cluster depuis le début, je finirais probablement par utiliser pp, mais j'ai trouvé que l'adaptation du code existant pour travailler avec pp est un cauchemar.