我正在尝试做一些事情,比如
resource = MyResource()
def fn(x):
something = dosemthing(x, resource)
return something
client = Client()
results = client.map(fn, data)问题是resource是不可序列化的,而且构造成本很高。因此,我希望在每个worker上构建它一次,并可供fn使用。
我该怎么做呢?或者,有没有其他方法可以让所有员工都可以使用resource?
发布于 2019-02-01 06:21:19
您总是可以构造一个惰性资源,例如
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上重新生成)。
此类最好在模块中定义,而不是在动态代码中定义。
这里没有锁,所以如果多个线程同时请求资源,而到目前为止还没有需要它,那么您将得到多余的工作。
https://stackoverflow.com/questions/54469698
复制相似问题