python 使用 ray 共享字典?

问题描述 投票:0回答:1

阅读 Ray docs 我发现它本身支持

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))

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

python ray
1个回答
0
投票

射线远程功能在不同的“进程”中运行。这意味着当您运行 4 个不同的远程调用时,它将具有不同的地址空间(因此,您在代码中所做的基本上没有那么有用)。序列化的含义是,当您使用参数

f.remote
调用
i
时,对象 i(即您的参数)应该被序列化,因为它将被发送到其他进程(以便 Ray 支持并行化)。 Ray 使用大对象的共享内存使这个过程非常快。

此外,如果您想共享状态,可以使用actors。当您使用 Actor 时,您不需要关心线程安全,因为 Actor 的状态更新是按照调用 Actor 的顺序发生的。

© www.soinside.com 2019 - 2024. All rights reserved.