gpt4 book ai didi

python - 如何在 Ray 中使用全局变量

转载 作者:行者123 更新时间:2023-12-05 05:01:42 29 4
gpt4 key购买 nike

我有一个看起来更复杂的脚本:

import ray 

var1 = 0
var2 = 0

@ray.remote
def create(n):
global var1
global var2
for i in range(10):
var1 += 1
var2 += 1

def create2():
tasks = [create.remote(i) for i in range(20)]
ray.get(tasks)

create2()

这个错误是因为 Ray 不允许以传统方式使用全局变量。我该如何解决这个问题?

最佳答案

一个解决方案是创建一个方法 .add1() 对于任何一个准 global -s,其实现将发送一个请求,将 main 加 1 .

这边main能够保持最便宜(不过分昂贵)的原子性来增加任何准 global , 由于强制执行 [SERIAL] -否则主要是信号处理[CONCURRENT] -信号到达。

这样做的可能工具是 ZeroMQ PUSH/PULLnanomsg或 pyng push/pull可扩展的正式通信模式原型(prototype)。

每个@ray.remote -装饰执行可以设置自己的{ PUSH | push } -信号路径的一侧,而 main -side 或其 { thread |基于流程}的衍生产品只是填充了一个中心{ PULL | pull } -side,位于常数.bind( <Transport_Class>:<Port#orOtherAdressSpecifier> ) “收集服务”的位置。每个 PUSH -er .connect()到那个先验已知的 TransportClass 目标地址,其余的都是微不足道的。

根据您的需要,也可以使用更稳健、更容错的方法。所以没有global -s 需要这样做或更复杂 any:M+N -弹性投票-、收集器-或通用多代理分布式信令。

关于python - 如何在 Ray 中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62640533/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com