Domanda

In parallelo Python, perché è necessario per avvolgere tutti i moduli la funzione passata avrà bisogno insieme con le variabili e gli spazi dei nomi in quella chiamata l'invio di lavori - quanto sia necessario è di preservare livello variabili "globali" del modulo? (Se questo è tutto quello che sta succedendo)

presentare la funzione:

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()
È stato utile?

Soluzione

La ragione per cui pp funziona il modo in cui lo fa, è che rende un'istanza fresca dell'interprete Python per ogni lavoratore, che è completamente indipendente da tutto ciò che ha eseguito prima o dopo. Ciò assicura che non ci sono effetti collaterali indesiderate, quali le importazioni __future__ essere attivi nel processo di lavoro. Il problema di questo è che rende le cose molto più complicato da ottenere, e nella mia esperienza con pp, non particolarmente robusto. pp fa cercare di rendere le cose un po 'più facile per l'utente, ma sembra introdurre più problemi di quanti ne risolva nei suoi sforzi per farlo.

Se dovessi scrivere il codice che è stato progettato per l'uso su un cluster dall'inizio, avrei probabilmente finire con pp, ma ho trovato che l'adattamento codice esistente al lavoro con pp è un incubo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top