代码之家  ›  专栏  ›  技术社区  ›  Daniel Mahler

正在初始化dask分布式工作进程上的状态

  •  1
  • Daniel Mahler  · 技术社区  · 6 年前

    我正在尝试做一些类似的事情

    resource = MyResource()
    def fn(x):
       something = dosemthing(x, resource)
       return something
    
    client = Client()
    results = client.map(fn, data)
    

    resource fn .

    还是有其他方法可以让你 资源 适用于所有工人?

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

    您总是可以构建一个惰性资源,比如

    class GiveAResource():
        resource = [None]
        def get_resource(self):
            if self.resource[0] is None:
                self.resource[0] = MyResource()
            return self.resource[0]
    

    这样的一个实例将在进程之间串行化,因此您可以将其作为输入包含到任何要在worker上执行的函数中,然后调用 .get_resource() 它将获得您当地昂贵的资源(将在以后出现的任何worker上重新制作)。

    此类最好在模块中定义,而不是在动态代码中定义。