1

我需要将一个变量传递给 dispy 节点的 setup() 方法,这样我就可以告诉节点要从配置文件加载哪个数据集。否则我必须为每个数据集编写一个特定的脚本,这会很痛苦。

def setup(): # executed on each node before jobs are scheduled
    # read data in file to global variable
    global data
    data = open('file.dat').read()
    return 0
...
if __name__ == '__main__':
    import dispy
    cluster = dispy.JobCluster(compute, depends=['file.dat'], setup=setup, cleanup=cleanup)

所以我想将字符串传递"file.dat"给设置,以便每个节点都可以实例化一次数据(因为它很大)。

4

1 回答 1

3

让我看看我是否理解这个问题。您想将参数传递给 setup,但实际调用setup发生在 function 的某处JobCluster。该调用不知道它应该传递一个参数。那是对的吗?

解决方案是使用标准库functools.partial。你做这样的事情:

if __name__ == '__main__':
    import dispy
    f = functools.partial(setup,"file.dat")
    cluster = dispy.JobCluster(compute, depends=['file.dat'], setup=f, cleanup=cleanup)

所返回的对象partial,当不带参数调用时,使用一个位置参数(“file.dat”)调用 setup。您必须重写 setup 来处理此参数,如下所示:

def setup(s): # executed on each node before jobs are scheduled
    # read data in file to global variable
    global data
    data = open(s).read()
    return 0
于 2015-07-07T02:28:12.547 回答