Ale*_*x S 8 python ipython ipython-parallel
我一直在玩IPython.parallel并且我想使用我自己的一些自定义模块,但是无法按照烹饪书中的说明使用它dview.sync_imports().对我有用的唯一一件事就是
def my_parallel_func(args):
import sys
sys.path.append('/path/to/my/module')
import my_module
#and all the rest
Run Code Online (Sandbox Code Playgroud)
然后在主要的到
if __name__=='__main__':
#set up dview...
dview.map( my_parallel_func, my_args )
Run Code Online (Sandbox Code Playgroud)
在我看来,正确的方法是这样的
with dview.sync_imports():
import sys
sys.path.append('/path/to/my/module')
import my_module
Run Code Online (Sandbox Code Playgroud)
但是这会抛出一个错误,说没有命名的模块my_module.
那么,使用它的正确方法是什么dview.sync_imports()?
问题是你正在改变PYTHONPATH运行客户端的本地进程中的just,而不是在运行的远程进程中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))
Run Code Online (Sandbox Code Playgroud)
基本上,您要使用的所有模块sync_imports必须已经在PYTHONPATH.
如果它不在PYTHONPATH那时你必须将它添加到远程执行的函数中的路径,然后在函数中导入模块.
| 归档时间: |
|
| 查看次数: |
3557 次 |
| 最近记录: |