使用ray的python共享字典?

2024-10-01 00:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

读取Raydocs我看到它支持对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))

我应该做些什么来引导线程安全行为吗


Tags: 对象inimportforreturn序列化remoteinit
1条回答
网友
1楼 · 发布于 2024-10-01 00:31:38

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

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

相关问题 更多 >