Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正在初始化dask分布式工作进程上的状态_Python_Python 3.x_Multiprocessing_Dask_Dask Distributed - Fatal编程技术网

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

Python 正在初始化dask分布式工作进程上的状态,python,python-3.x,multiprocessing,dask,dask-distributed,Python,Python 3.x,Multiprocessing,Dask,Dask Distributed,我正在尝试做一些类似的事情 resource = MyResource() def fn(x): something = dosemthing(x, resource) return something client = Client() results = client.map(fn, data) class GiveAResource(): resource = [None] def get_resource(self): if self.re

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

resource = MyResource()
def fn(x):
   something = dosemthing(x, resource)
   return something

client = Client()
results = client.map(fn, data)
class GiveAResource():
    resource = [None]
    def get_resource(self):
        if self.resource[0] is None:
            self.resource[0] = MyResource()
        return self.resource[0]
问题在于
资源
是不可序列化的,并且构造成本很高。 因此,我想在每个工人身上构建一次,供
fn
使用

我该怎么做?
或者是否有其他方法使
资源
可用于所有工作人员?

您始终可以构建一个惰性资源,例如

resource = MyResource()
def fn(x):
   something = dosemthing(x, resource)
   return something

client = Client()
results = client.map(fn, data)
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上重新生成)

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

这里没有锁定,因此如果多个线程同时请求资源,而到目前为止还不需要它,那么您将得到冗余的工作