首页 > 解决方案 > Python Ray 共享内存访问

问题描述

我有一个关于 Ray 框架中共享内存访问的问题。想象一下在一台机器
上进行以下设置:

  1. 启动 Ray 集群
  2. 启动一个进程/工作者 python 脚本w1.py ,它通过ray.put(O1)将对象O1放入共享内存
  3. 启动一个进程/工作者 python 脚本w2.p y,它试图通过ray.get(...)从共享内存中获取O1

有没有办法从另一个工作进程w2.py访问对象O1 (从w1.py进程放入共享内存) ?

当我从w2.py执行ray.objects()时,我得到了对象引用字符串,但是我怎么能从共享内存中检索对象呢?我无法在w2.py中初始化ObjectRef 对象

标签: pythonredismultiprocessingshared-memoryray

解决方案


这不是本机支持的。原因是 ray 的对象具有用于各种功能的各种元数据(例如,性能优化或使用引用计数的自动内存管理)。

如果您想实现这一目标,我认为有两种解决方案。

  1. 使用分离的演员 api。分离的演员是一生不与司机分享票价的演员。一旦你创建了一个分离的actor,你就可以使用 ray.get_actor API 来获取actor句柄。这样,您可以将对象放在分离的 Actor 中并从多个驱动程序访问。

  2. 还有另一种使用cloudpickle的方法,但是我对这个解决方案不是很熟悉,所以我不会写它。请访问 Ray 在其 Github 存储库中的讨论页面以询问有关它的更多详细信息。


推荐阅读