我正在尝试做类似的事情
resource = MyResource()
def fn(x):
something = dosemthing(x, resource)
return something
client = Client()
results = client.map(fn, data)
问题在于resource
不可序列化,并且构造成本很高。
因此,我想在每个工人上构造一次,并且fn
可以使用它。
我该怎么做?
还是有其他方法可以使resource
在所有工作人员中可用?
答案 0 :(得分:1)
您总是可以构造一个惰性资源,例如
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()
将获得您本地的昂贵资源(该资源将对以后出现的任何工人进行翻新。
最好在模块而不是动态代码中定义此类。
这里没有锁定,因此,如果到目前为止没有需要多个线程同时请求资源,那么您将获得多余的工作。