阅读 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))
我应该做些什么来保证线程安全行为吗?
射线远程功能在不同的“进程”中运行。这意味着当您运行 4 个不同的远程调用时,它将具有不同的地址空间(因此,您在代码中所做的基本上没有那么有用)。序列化的含义是,当您使用参数
f.remote
调用 i
时,对象 i(即您的参数)应该被序列化,因为它将被发送到其他进程(以便 Ray 支持并行化)。 Ray 使用大对象的共享内存使这个过程非常快。
此外,如果您想共享状态,可以使用actors。当您使用 Actor 时,您不需要关心线程安全,因为 Actor 的状态更新是按照调用 Actor 的顺序发生的。