好像是客户端方法注册工人回调在这种情况下可以做你想做的事。你仍然需要某处放置你的变量,因为在 python 中没有真正的全局范围。例如,某个地方可以是导入模块的任何属性,然后任何工作人员都可以访问该属性。您还可以将其添加为工作实例本身的属性,但我认为没有明显的理由要这样做。
一种有效的方法是劫持随机选择的内置模块;但我并不特别推荐这个(见下文)
def attach_var(name, value):
import re
re.__setattr__(name, value)
client.run(attach_var, 'x', 1)
def use_var():
# any function running on a worker can do this, via delayed or
# whatever method you pass with
import re
return re.x
client.run(use_var)
不过,在继续之前,您是否已经考虑过delayed(calib_data)
or scatter
,这会将您的变量复制到需要的位置,例如,
futures = client.scatter(calib_data, broadcast=True)
或者确实使用普通的方式将数据加载到工作人员中delayed
语义学
dcalib = dask.delayed(load_calib_data)()
work = dask.delayed(process_stuff)(dataset1, dcalib)