首页 > 解决方案 > 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))

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

标签: pythonray

解决方案


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

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


推荐阅读