Python 使用decorator时发生ipyparallel错误
我试图使用带有Python 使用decorator时发生ipyparallel错误,python,ipython,ipython-parallel,jupyter-notebook,Python,Ipython,Ipython Parallel,Jupyter Notebook,我试图使用带有lru\u缓存的ipyparallel系统运行作业,但遇到问题 从终端: ipcluster start -n 2 在ipython笔记本中: from ipyparallel import Client clients = Client() def world(): return hello() + " World" def hello(): return "Hello" world() 'Hello World' 使用ipyparallel运行它需要:
lru\u缓存的ipyparallel系统运行作业,但遇到问题
从终端:
ipcluster start -n 2
在ipython笔记本中:
from ipyparallel import Client
clients = Client()
def world():
return hello() + " World"
def hello():
return "Hello"
world()
'Hello World'
使用ipyparallel运行它需要:
clients[:].push(dict(hello=hello))
如果没有上一行,以下操作将失败,这并非意外,但如果运行,则可以正常工作:
clients[:].apply_sync(world)
['Hello World', 'Hello World']
这一切都如预期的那样工作,但是,对于lru\u缓存
并行步骤会产生错误
from ipyparallel import Client
from functools import lru_cache
clients = Client()
def world():
return hello() + " World"
@lru_cache(maxsize=2048)
def hello():
return "Hello"
clients[:].push(dict(hello=hello))
clients[:].apply_sync(world)
此操作失败,出现以下错误:
[0:apply]:
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<string> in <module>()
<ipython-input-17-9ac5ef032485> in world()
NameError: name 'hello' is not defined
[1:apply]:
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<string> in <module>()
<ipython-input-17-9ac5ef032485> in world()
NameError: name 'hello' is not defined
[0:应用]:
---------------------------------------------------------------------------名称错误
回溯()
在世界上
NameError:未定义名称“hello”
[1:应用]:
---------------------------------------------------------------------------名称错误
回溯()
在世界上
NameError:未定义名称“hello”
我意识到这可能是lru\u cache
使用闭包时的名称空间问题,但是我希望有一个解决方法,以便我能够使用它。或者如果有人告诉我这根本不可能,那也会很有用,谢谢
我正在使用:
ipykernel(4.1.1)
ipyparallel(4.1.0)
ipython(4.0.1)
Python(3.5.1)我很确定它与装饰器本身有关。如果用任何其他装饰函数替换lru\u cache
,则会出现相同的错误。我不知道它是否能被解决。谢谢,@imaluengo这也是我最初的想法,尽管我能和其他装饰师一起工作。我在最初的文章中讨论了是否包含一个具有工作装饰器的示例,尽管这篇文章越来越长。Ops,我在python 2.7中尝试了一个测试装饰器,但它对我不起作用:/