我一直在玩 IPython.parallel,我想使用我自己的一些自定义模块,但无法按照上的说明进行操作烹饪书 http://ipython.org/ipython-doc/stable/parallel/parallel_multiengine.html using dview.sync_imports()
。唯一对我有用的是
def my_parallel_func(args):
import sys
sys.path.append('/path/to/my/module')
import my_module
#and all the rest
然后主要是为了
if __name__=='__main__':
#set up dview...
dview.map( my_parallel_func, my_args )
我认为正确的方法是这样的
with dview.sync_imports():
import sys
sys.path.append('/path/to/my/module')
import my_module
但这会引发错误,指出没有名为的模块my_module
.
那么,使用的正确方法是什么dview.sync_imports()
??
问题是你正在改变PYTHONPATH
只在运行客户端的本地进程中,而不是在运行客户端的远程进程中ipcluster
.
如果运行下一段代码,您可以观察到此行为:
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))
基本上您想要使用的所有模块sync_imports
必须已经在PYTHONPATH
.
如果它不在PYTHONPATH
那么你必须将其添加到你远程执行的函数中的路径中,然后在函数中导入该模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)