Проблемы с пространством имен Python при использовании ipython parallel

Я начинаю экспериментировать с параллельными инструментами 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

Я не понимаю... почему я не могу поместить функцию в другой файл и импортировать ее?

10
задан Ray 8 March 2014 в 12:36
поделиться