我想使用 IPython.parallel 并行化一个函数,当我在 IPython shell 中定义它时,它可以完美地工作:
Type: function
Base Class: <type 'function'>
String Form:<function gradient at 0x3ae0398>
Namespace: Interactive
File: /root/<ipython-input-30-cf7eabdfef84>
Definition: gradient(w)
Source:
def gradient(w):
s = (1.0 + exp(y * (X * w)))**-1
return C*X.T*((1 - s) * y)
rc = Client()
rc[:].apply_sync(gradient, w)
...
但是,当我在模块中定义它并使用导入时:
Type: function
Base Class: <type 'function'>
String Form:<function gradient at 0x3933d70>
Namespace: Interactive
File: /root/mv.py
Definition: mv.gradient(w)
Source:
def gradient(w):
s = (1.0 + exp(y * (X * w)))**-1
return C*X.T*((1 - s) * y)
import mv
rc = Client()
rc[:].apply_sync(mv.gradient, w)
CompositeError: one or more exceptions from call to method: gradient
[0:apply]: NameError: global name 'y' is not defined
[1:apply]: NameError: global name 'y' is not define
此外,它在运行 Python 2.7.2/IPython 0.12 的本地系统上运行良好,而使用最新的 Starcluster Ubuntu AMI 在 Python 2.7.2+/IPython 0.12 上崩溃。
这里发生了什么?
更新:我从 github 安装了 IPython 0.13.dev 版本,现在它可以工作了。