基于Dask和Xarray的并行计算

基于Dask和Xarray的并行计算,dask,python-xarray,dask-distributed,dask-delayed,Dask,Python Xarray,Dask Distributed,Dask Delayed,我有以下功能 @dask.delayed def load_ds(p): import xarray as xr multi_file_dataset = xr.open_mfdataset(p, combine='by_coords', concat_dim="time", parallel=True) mean = multi_file_dataset['tas'].mean(dim='time') return mean 它打开一组Ne

我有以下功能

@dask.delayed
def load_ds(p):
    import xarray as xr
    multi_file_dataset = xr.open_mfdataset(p, combine='by_coords', concat_dim="time", parallel=True)
    mean = multi_file_dataset['tas'].mean(dim='time')
    return mean
它打开一组NetCDF文件(由路径p标识),并计算一段时间内的平均值

我试图在两个不同的路径(=数据集)上并行运行函数:

我也试过了

results = []
result1 = dask.delayed(load_ds)(path1)
results.append(result1)
result2 = dask.delayed(load_ds)(path2)
results.append(result2)
  
futures = dask.persist(*results)
results = dask.compute(*futures)
但是,我注意到执行实际上是在我尝试检索结果时开始的:

 print(results[0].values)
再一次,当我找回第二个

 print(results[1].values)

怎么了?有没有办法只检索一次results对象?

鉴于您目前所做的工作,那么:

delayed_task = dask.delayed(
    lambda L: (L[0].values, L[1].values)
)(results)
和“以后”


这是跑步的原则。所以没有什么不对。
结果
本身必须是
延迟
修饰函数的参数。是否有方法在两个数据集上并行运行该函数?它似乎不起作用…@Fab请参阅编辑。
打印(tup)
返回什么?计算不会开始。。。dask仪表板中没有任务。我可以对其进行测试。看起来不错!这种方法更好还是等同于运行
client.submit(load_ds,path2)
,然后运行
results=client.gather(futures)
?@Fab实际上,
~.compute
是同步的。因此,这取决于在返回结果之前是否要阻止操作。换句话说,我会选择异步技术,比如。
delayed_task = dask.delayed(
    lambda L: (L[0].values, L[1].values)
)(results)
tup = delayed_task.compute()