有没有办法在 dispy 中将变量传递给 setup()?
Is there a way to pass a variable to setup() in dispy?
我需要将一个变量传递给 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"
传递给设置,以便每个节点都可以实例化数据一次(因为它很大)。
让我看看我是否理解这个问题。您想要将参数传递给设置,但 setup
的实际调用发生在函数 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") 调用设置。你必须重写设置来处理这个参数,像这样:
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
我需要将一个变量传递给 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"
传递给设置,以便每个节点都可以实例化数据一次(因为它很大)。
让我看看我是否理解这个问题。您想要将参数传递给设置,但 setup
的实际调用发生在函数 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") 调用设置。你必须重写设置来处理这个参数,像这样:
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