2013-09-02 20 views
8

Gram w IPython.parallel i chciałem użyć własnych niestandardowych modułów, ale nie udało mi się tego zrobić zgodnie z wyjaśnieniem na the cookbook przy użyciu dview.sync_imports(). Jedyną rzeczą, która pracowała dla mnie było cośImportowanie niestandardowych modułów w silnikach IPython.parallel z sync_imports()

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

a następnie w głównym tylko

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

poprawny sposób to zrobić byłoby moim zdaniem być coś podobnego

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

ale spowoduje to błąd informujący, że nie ma modułu o nazwie my_module.

A więc, jaki jest właściwy sposób robienia tego przy użyciu dview.sync_imports()?

+0

w prawo, ale sys.path ma. Poprawiono to! –

Odpowiedz

8

Problem polega na tym, że zmieniasz PYTHONPATH tylko w lokalnym procesie, w którym działa Klient, a nie w zdalnych procesach uruchomionych w ipcluster.

Można zaobserwować to zachowanie po uruchomieniu następnego pokoju kodu:

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

Zasadniczo wszystkie moduły, które chcą korzystać z sync_imports musi być już w PYTHONPATH.

Jeśli nie ma go w PYTHONPATH, należy dodać go do ścieżki w funkcji wykonywanej zdalnie, a następnie zaimportować moduł do tej funkcji.

+0

Tak, to ma sens. Zamierzam to wypróbować. Powinno działać! –

+0

OK, więc zrobiłem to, ale z jakiegoś powodu zdalne silniki nie otrzymują poprawnie PYTHONPATH. W jakim środowisku zdalne silniki otrzymują swoją PYTHONPATH? Ten, z którego uruchomiłem skrypt? Domyślna powłoka dla systemu? Pliki konfiguracyjne Pythona? Uruchomiłem twój dokładny skrypt, PYTHONPATH jest poprawnie skonfigurowany, lokalny import działa, a zdalny import nie. –

+0

@AlexS Jak uruchomić zdalne silniki? 'ipcluster start -n 4'? –

Powiązane problemy