IPython.parallel名称空间

2024-04-18 21:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用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)
...

但是,当我在模块中定义它并使用import时:

^{pr2}$

此外,它在运行python2.7.2/ipython0.12的本地系统上运行良好,而 它在python2.7.2+/ipython0.12上崩溃,使用最新的Starcluster Ubuntu AMI。在

这是怎么回事?在

更新:我从github安装了ipython0.13.dev版本,现在可以正常工作了。在


Tags: formbasestring定义paralleltypeipythonfunction
1条回答
网友
1楼 · 发布于 2024-04-18 21:06:13

区别在于模块全局变量。当在模块中定义函数时,全局名称空间就是模块的名称空间(即mv.y)。当该模块是__main__,例如交互式定义的函数,则全局命名空间是引擎上的用户,并受execute("y=5")的影响。在

IPython提供了一个decorator,如果您想在模块中定义函数,这些函数的行为应该像是交互式定义的(可以作为全局变量访问用户名称空间):

# mymod

from IPython.parallel.util import interactive

@interactive
def by_a(b):
    """multiply a by b"
    return a*b

您可以交互地执行以下操作:

^{pr2}$

相关问题 更多 >