2015-09-28 3 views
0

Я новичок в ipyparallel, и я хочу использовать этот пакет для реализации параллельных вычислений с помощью приложения для машинного обучения.IPython ipyparallel map_sync ImportError

Ниже приведено тестирование на ipyparallel. Я определяю функцию с именем add на файле func.py и главную функцию в файле test.py.

коды func.py являются:

#!/usr/bin/env python 
# coding=utf-8 

def add(*numbers): 
    numbers = list(numbers) 
    for i, n in enumerate(numbers): 
     numbers[i] = n + 1 
    return numbers 

коды test.py являются:

#!/usr/bin/env python 
# coding=utf-8 

from func import add 
from ipyparallel import Client 

if __name__ == '__main__': 
    rc = Client(
     '/home/fit/.ipython/profile_default/security/ipcontroller-client.json') 

    print map(add, [1, 2, 3] 
    print rc[0].map_sync(add, [1, 2, 3, 4]) 

Поскольку вы знаете map может работать без ошибок, но при запуске map_sync, возвращается в командной строке :

☁ test python test.py 
[[2], [3], [4]] 
Traceback (most recent call last): 
    File "test.py", line 14, in <module> 
    print rc[0].map_sync(add, [1, 2, 3, 4]) 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/view.py", line 353, in map_sync 
    return self.map(f,*sequences,**kwargs) 
    File "<string>", line 2, in map 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/view.py", line 54, in sync_results 
    ret = f(self, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/view.py", line 618, in map 
    return pf.map(*sequences) 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/remotefunction.py", line 268, in map 
    ret = self(*sequences) 
    File "<string>", line 2, in __call__ 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/remotefunction.py", line 75, in sync_view_results 
    return f(self, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/remotefunction.py", line 251, in __call__ 
    return r.get() 
    File "/usr/local/lib/python2.7/dist-packages/ipyparallel/client/asyncresult.py", line 104, in get 
    raise self._exception 
ipyparallel.error.CompositeError: one or more exceptions from call to method: add 
[0:apply]: ImportError: No module named func 

И если я определяю функцию в файле test.py, map_sync может работать:

#!/usr/bin/env python 
# coding=utf-8 

#from func import add 
from ipyparallel import Client 

def add(*numbers): 
    numbers = list(numbers) 
    for i, n in enumerate(numbers): 
     numbers[i] = n + 1 
    return numbers 


if __name__ == '__main__': 
    rc = Client(
     '/home/fit/.ipython/profile_default/security/ipcontroller-client.json') 

    print map(add, [1, 2, 3]) 

    print rc[0].map_sync(add, [1, 2, 3, 4]) 

И результат:

☁ test python test.py 
[[2], [3], [4]] 
[[2], [3], [4], [5]] 

Интересно для map_sync, как использовать функцию определения в другом файле? И как импортировать эти функции? Поскольку from py_file import func не работает для map_sync.

ответ

0

Необходимый модуль необходимо скопировать (или вы можете нажать или модули) до engine machines, а 3-сторонние пакеты должны быть установлены на engine machines, если нет, то будет происходить ImportError.

Но, при запуске программы, вы должны запустить:

$ ipcontroller --ip=client_ip --reuse 

на client machine, и там будет 2 файлы, созданные в /home/user/.ipython/profile_default/security каталоге

$ ls /home/user/.ipython/profile_default/security 
ipcontroller-client.json ipcontroller-engine.json 

Так как ipcontroller-client.json и ipcontroller-engine.json должны быть скопировано в engine machines и запущено

$ ipengine --file=/path/to/ipcontroller-engine.json 

engine machines, поэтому была создана среда parallel computing.

И затем вы можете определить свои задачи parallel computing и запустить свои программы.