IPython並列ツールの実験を始めていますが、問題があります。私はPythonエンジンを次のように起動します:
ipcluster start -n 3
次に、次のコードが正常に実行されます。
from IPython.parallel import Client
def dop(x):
rc = Client()
dview = rc[:]
dview.block=True
dview.execute('a = 5')
dview['b'] = 10
ack = dview.apply(lambda x: a+b+x, x)
return ack
ack = dop(27)
print ack
必要に応じて[42、42、42]を返します。しかし、コードを別のファイルに分割すると、次のようになります。dop.py:
from IPython.parallel import Client
def dop(x):
rc = Client()
dview = rc[:]
dview.block=True
dview.execute('a = 5')
dview['b'] = 10
print dview['a']
ack = dview.apply(lambda x: a+b+x, x)
return ack
次のことを試してください。
from dop import dop
ack = dop(27)
print ack
各エンジンからエラーが発生します:
[0:apply]: NameError: global name 'a' is not defined
[1:apply]: NameError: global name 'a' is not defined
[2:apply]: NameError: global name 'a' is not defined
わからない...関数を別のファイルに入れてインポートできないのはなぜですか?