python共享字典使用ray



阅读Ray文档时,我发现它支持dicts的序列化("直接序列化"(,但我不明白这意味着什么,也不明白该如何使用那些序列化的对象
假设我有以下流程:

import ray
ray.init()
dict_1 = {}
dict_2 = {}
@ray.remote
def f(x):
dict_1[x] = x*x
dict_2[x] = x*x*x
return x
futures = [f.remote(i) for i in range(4)]
print(ray.get(futures))

我应该做些什么来确定线程安全行为吗?

ray远程函数在不同的"进程"中运行。这意味着,当您运行4个不同的远程调用时,它将具有不同的地址空间(因此,您在代码中所做的基本上没有那么有用(。序列化的意思是,当您使用参数i调用f.remote时,对象i(即您的参数(应该被序列化,因为它将被发送到其他进程(以便Ray支持并行化(。Ray使用大对象的共享内存使这个过程非常快速。

此外,如果您想要共享状态,可以使用actor(https://ray.readthedocs.io/en/latest/actors.html)。当您使用actor时,您不需要关心线程安全,因为actor的状态更新是按照调用actor的顺序进行的。

最新更新