python - 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 个不同的远程调用时,它将具有不同的地址空间(因此,您在代码中所做的基本上没有那么有用)。序列化的意思是当你f.remote
用参数调用时i
,对象 i (这是你的参数)应该被序列化,因为它将被发送到其他进程(以便 Ray 支持并行化)。Ray 使用大对象的共享内存使这个过程非常快。
此外,如果您想要共享状态,您可以使用演员 ( https://ray.readthedocs.io/en/latest/actors.html )。当你使用actor时,你不需要关心线程安全,因为actor的状态更新是按照actor被调用的顺序发生的。
推荐阅读
- ios - 是否可以添加带有多行文本的左栏按钮项
- flutter - Flutter web 执行“热重启”而不是“热重载”。Flutter Web 是否支持“热重载”?
- android - 神经网络 API 与芯片组 NPU api
- java - 这个正弦源代码有什么问题?
- c++ - 将 .txt 中的矩阵读入 C++
- keras - 如何提高训练卷积神经网络的验证准确率?
- racket - Racket - 根据给定列表生成一个新列表
- spring-boot - 如何在 Spring Boot 中启用 SSL
- reactjs - 是否可以为谷歌图表表中的一行设置最大高度?
- c# - C# 我必须向右旋转这个数组,但我不知道该怎么做