代码之家  ›  专栏  ›  技术社区  ›  Wolfgang Kerzendorf

使用变量设置Dask工作进程

  •  0
  • Wolfgang Kerzendorf  · 技术社区  · 6 年前

    我希望在worker加载并将其放入全局变量(例如 calib_data

    1 回复  |  直到 6 年前
        1
  •  2
  •   mdurant    6 年前

    似乎是客户端方法 register_worker_callbacks 在某处 要放置变量,因为在python中没有真正的全局作用域。例如,某个地方可以是导入模块的任何属性,任何工作人员都可以访问该属性。您也可以将其添加为worker实例本身的属性,但我看不出有明显的理由要这样做。

    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) scatter

    futures = client.scatter(calib_data, broadcast=True)
    

    或者使用普通的 delayed

    dcalib = dask.delayed(load_calib_data)()
    work = dask.delayed(process_stuff)(dataset1, dcalib)