在 Ray 中的 Actor 之间共享对象

Om *_*ari 1 python python-3.x ray pandas

如何从多个参与者读取数据并将数据写入同一对象?

文档说: https://docs.ray.io/en/master/memory-management.html

import numpy as np
a = ray.put(np.zeros(1))
b = ray.get(a)
Run Code Online (Sandbox Code Playgroud)

但这会产生新副本。

小智 5

在参与者之间使用全局变量(可以读/写)的正确方法是使用持有对象的参与者。https://docs.google.com/document/d/167rnnDFIVRhHhK4mznEIemOtj63IOhtIPvSYaPgI4Fg/edit#heading=h.eg7m6lz2y48u

Plasma 对象是不可变的,只有在将对象复制到工作线程的堆内存后才能修改该对象(这意味着此时它不再是全局的)。

另请注意,对于您的示例,它不会创建新副本!它使用称为零复制读取(https://www.python.org/dev/peps/pep-0574/)的东西,这意味着仅复制带内数据(numpy对象的元数据),而带外数据则被复制。数据(缓冲区)不会复制到Python的堆内存(它驻留在共享内存中,并且您的ray程序直接指向该内存区域)。