You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ray Actor实例运行进程与方法并行调用技术问询

Ray Actor 核心问题解答

问题1:Ray Actor的实例是否仅在单个进程中运行?

是的,单个Ray Actor实例只会运行在一个独立进程中。Actor是Ray提供的有状态计算单元,Ray会为每个Actor实例分配专属进程,该实例的所有方法调用都在这个进程内执行,以此保障实例状态的一致性与线程安全。

问题2:单个远程Ray Actor实例的方法能否被并行调用?

单个Ray Actor实例的方法无法并行执行,所有对该实例的方法调用会被放入一个任务队列,按顺序串行处理。

验证示例1:单Actor实例串行执行

代码:

@ray.remote
class ActorTest:
    def __init__(self) -> None:
        self.factor = 10
    
    def do_work(self, n):
        result = self.factor * n
        print(result)
        return result

if __name__ == '__main__':
    ray.init()
    actor = ActorTest.remote()
    results = [actor.do_work.remote(i) for i in range(10)]
    print(ray.get(results))

输出(所有调用共用同一个进程):

(ActorTest pid=15176) 10
(ActorTest pid=15176) 20
(ActorTest pid=15176) 30
(ActorTest pid=15176) 40
(ActorTest pid=15176) 50
(ActorTest pid=15176) 60
(ActorTest pid=15176) 70
(ActorTest pid=15176) 80
(ActorTest pid=15176) 90

验证示例2:多Actor实例并行执行

要实现并行,需创建多个Actor实例,让不同实例处理不同任务:
代码:

@ray.remote
class ActorTest:
    def __init__(self) -> None:
        self.factor = 10
    
    def do_work(self, n):
        result = self.factor * n
        print(result)
        return result

if __name__ == '__main__':
    ray.init()
    results = []
    for i in range(10):
        actor = ActorTest.remote()
        results.append(actor.do_work.remote(i)) 
    print(ray.get(results))

输出(每个调用对应独立进程):

(ActorTest pid=31464) 70
(ActorTest pid=26272) 0
(ActorTest pid=35320) 20
(ActorTest pid=30868) 60
(ActorTest pid=10696) 10
(ActorTest pid=15688) 30
(ActorTest pid=27984) 90
(ActorTest pid=39852) 40
(ActorTest pid=10380) 80

内容的提问来源于stack exchange,提问作者mike01010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:45:49