2013-09-02 9 views
8

Ho giocato con IPython.parallel e volevo utilizzare alcuni moduli personalizzati di mia proprietà, ma non sono stato in grado di farlo come spiegato su the cookbook utilizzando dview.sync_imports(). L'unica cosa che ha funzionato per me è stato qualcosa di simileImporta moduli personalizzati su motori IPython.parallel con sync_imports()

def my_parallel_func(args): 
    import sys 
    sys.path.append('/path/to/my/module') 
    import my_module 
    #and all the rest 

e quindi per lo più solo per

if __name__=='__main__': 
    #set up dview... 
    dview.map(my_parallel_func, my_args) 

Il modo corretto per farlo sarebbe a mio parere essere qualcosa come

with dview.sync_imports(): 
    import sys 
    sys.path.append('/path/to/my/module') 
    import my_module 

ma questo genera un errore che dice che non esiste un modulo chiamato my_module.

Quindi, qual è il modo giusto di farlo utilizzando dview.sync_imports() ??

+0

right, ma sys.path lo fa. Corretto! –

risposta

8

Il problema è che si sta modificando lo PYTHONPATH solo nel processo locale che esegue il Client e non nei processi remoti in esecuzione nello ipcluster.

È possibile osservare questo comportamento se si esegue la prossima pace di codice:

from IPython.parallel import Client 

rc = Client() 
dview = rc[:] 

with dview.sync_imports(): 
    import sys 
    sys.path[:] = ['something'] 

def parallel(x): 
    import sys 
    return sys.path 

print 'Local: ', sys.path 
print 'Remote: ', dview.map_sync(parallel, range(1)) 

In pratica tutti i moduli che si desidera utilizzare con sync_imports devono già essere in PYTHONPATH.

Se non è nello PYTHONPATH, è necessario aggiungerlo al percorso nella funzione che si esegue in remoto, quindi importare il modulo nella funzione.

+0

Sì, questo ha senso. Ho intenzione di provarlo. Dovrebbe funzionare! –

+0

Ok, l'ho fatto, ma per qualche motivo i motori remoti non stanno ottenendo il PYTHONPATH giusto. Da quale ambiente i motori remoti ottengono il loro PYTHONPATH? Quello da cui ho eseguito il copione? La shell di default per il sistema? File di configurazione Python? Ho eseguito il tuo script esatto, PYTHONPATH è configurato correttamente, l'importazione locale funziona, l'importazione remota no. –

+0

@AlexS Come si avviano i motori remoti? 'ipcluster start -n 4'? –

Problemi correlati