9

私は IPython.parallel をいじっていて、独自のカスタム モジュールを使用したかったのですが、Cookbook 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()ですか??

4

1 に答える 1

9

問題は、で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リモートで実行する関数のパスに追加してから、モジュールを関数にインポートする必要があります。

于 2013-09-02T10:14:17.997 に答える