为了账号安全,请及时绑定邮箱和手机立即绑定

在 dask 分布式工作器上初始化状态

在 dask 分布式工作器上初始化状态

拉风的咖菲猫 2021-10-26 15:51:00
我正在尝试做类似的事情resource = MyResource()def fn(x):   something = dosemthing(x, resource)   return somethingclient = Client()results = client.map(fn, data)问题是它resource不可序列化并且构建起来很昂贵。因此,我想在每个工人上构造一次它,并可供fn.我该怎么做呢?或者有没有其他方法可以让resource所有工人都可以使用?
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

你总是可以构建一个懒惰的资源,比如


class GiveAResource():

    resource = [None]

    def get_resource(self):

        if self.resource[0] is None:

            self.resource[0] = MyResource()

        return self.resource[0]

这样的一个实例将在进程之间很好地序列化,因此您可以将它作为要在工作人员上执行的任何函数的输入,然后调用.get_resource()它会获得本地昂贵的资源(它将在稍后出现的任何工作人员上重新制作)。


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


这里没有锁定,因此如果多个线程在到目前为止还不需要资源的情况下同时请求资源,您将获得多余的工作。


查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信