Ray:是否可以在kwargs论证中使用'ray.put'?



我有一个函数,它接受我想用来并行处理请求的kwargs。我想知道是否有一种简单的方法来处理kwargs,而不必在那里迭代并将它们"放在"共享/集中存储中。

像这样:

import ray
ray.init(ignore_reinit_error=True)
def get_data_multip(code=['AB', 'CD', 'ED'], **kwargs):
kwargs_ref = ray.put(**kwargs)
results = []
for s in code:
func_ref = ray.remote(get_data)
res = func_ref.remote(code = s,**kwargs)
results.append(res)

rets = ray.get(results)
print(rets)
def get_data(code, st_dt = None, end_dt = None):
print(f'st_dt:{st_dt}, end_dt:{end_dt}')
return [1,2,3,4]
get_data_multip(code = ['AB', 'CD', 'ED'], st_dt = '01/01/2020', end_dt = '12/31/2020')

上述操作将在'put'行失败,并出现错误:

put()得到一个意外的关键字参数'st_dt'

我以为我有一个解决方案-但这只是传递一个字典作为第二个参数,而不是一个kwargs。

def get_data_multip(code=['AB', 'CD', 'ED'], **kwargs):
kwargs_ref = ray.put(vars()['kwargs'])
results = []
for s in code:
func = ray.remote(get_data)
res = func.remote(s, kwargs_ref)
results.append(res)

rets = ray.get(results)
print(rets)

好吧,kwargs是一个字典,所以不是把它完全传递给put,你可以传递它的元素,并创建一个新的字典,它的值是引用,这样当你调用func_ref.remote(code = s,**kwargs_ref)时,python将把引用解包到各自的参数中,你将简单地解包一个普通的python字典。

import ray
ray.init(ignore_reinit_error=True)

def get_data_multip(code=['AB', 'CD', 'ED'], **kwargs):
kwargs_ref = {key:ray.put(kwargs[key]) for key in kwargs}
results = []
for s in code:
func_ref = ray.remote(get_data)
res = func_ref.remote(code=s, **kwargs_ref)
results.append(res)
rets = ray.get(results)
print(rets)

def get_data(code, st_dt=None, end_dt=None):
print(f'st_dt:{st_dt}, end_dt:{end_dt}')
return [1, 2, 3, 4]

get_data_multip(code=['AB', 'CD', 'ED'], st_dt='01/01/2020', end_dt='12/31/2020')

相关内容

  • 没有找到相关文章

最新更新