dask 分布式集群中的缓存和数据传递

时间:2020-12-21 18:23:30

标签: python dask dask-distributed dask-delayed

我在找出从内存数据缓存访问集群数据的最佳方式时遇到了一些困难。

例如我有一个数据管理对象(缓存),例如data_manager,在全局级别,我希望能够从函数内部读取,例如square,在集群上执行。在我的实际用例中,此 data_manager 更为复杂,并且根据需要从各种来源加载/缓存数据。它可能非常大 - 所以我的问题是它是否被序列化并传递了下面的每个函数调用 - 因为这对我的用例来说效率很低。或者有没有办法将它复制并保存在 python 进程中每个工作人员的全局命名空间中(我不需要跨工作人员共享数据/状态 - 只需跨每个工作人员内的函数调用)?

理想情况下,我希望有一个全局 data_manager 对象,该对象在每个 worker 上初始化一次,然后在下面的函数调用中访问 - 以便函数调用中的 data_manager 在实际调用时使用 worker 上的对象调用,而不是在我的本地进程中定义并序列化+传入的那个。

import numpy as np

data_manager = dict(a=1, b=2, c=3)

def square(letter, power):
    base = data_manager.get(letter, np.nan)
    return base**power

grid = [
    dict(letter='a', power=1),
    dict(letter='a', power=2),
    dict(letter='b', power=1),
    dict(letter='b', power=2),
    dict(letter='c', power=1),
    dict(letter='c', power=2),
    dict(letter='d', power=1),
    dict(letter='d', power=2),
]

futures = [client.submit(square, **params) for params in grid]

我尝试为工作人员使用 preload 选项,但无法以这种方式设置 data_manager。

谢谢!

0 个答案:

没有答案