python - 如何在 Ray 中使用全局变量
问题描述
我有一个看起来像这个更复杂版本的脚本:
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()
一种解决方案是为任何一个 quasi -s创建一个方法,该方法global
的实现将发送一个将 1 添加到main
.
通过这种方式,由于对其他主要信号到达的强制信号处理,因此main
能够保持增加任何准信号的最便宜(不是过于昂贵)的原子性。global
[SERIAL]
[CONCURRENT]
这样做的可能工具是 ZeroMQPUSH/PULL
和nanomsg
/或 pynng push/pull
Scalable Formal Communication Pattern 原型。
每个@ray.remote
-decorated 执行都可以设置它自己{ PUSH | push }
的信号路径的 -side,而main
-side 或其 { thread | 基于进程 } 的衍生只是填充一个中央{ PULL | pull }
端,位于一个恒定的.bind( <Transport_Class>:<Port#orOtherAdressSpecifier> )
“收集服务”位置。先验已知的TransportClass目标地址的每个PUSH
-ers ,其余的都是微不足道的。.connect()
根据您的需要,也可以使用更健壮、抗错误的方法。因此global
,执行此操作或更复杂any:M+N
的弹性投票、收集器或通用多代理分布式信令不需要 -s。
推荐阅读
- reactjs - React-Bootstrap Collapse 不适用于自定义组件
- excel - VBA中只加粗一部分
- r - 如何使用 barplot() 在 R 中使条更细?
- android - 减小一些 pdf 文件的大小
- python - 基于 Django 函数的视图允许 is_active 用户,而 ClassBasedView 不允许 is_active 用户
- python - (Python):使用二维数组移动平均
- java - 使用 Spring JPA - Angular 8 保存新数据
- ruby - 如何在 Mac OS 上安装新的 Ruby 版本
- python - 如何在 python 中使用“matplotlib”在曲面上创建一条线
- c# - 使用 web.config 添加 x-api-key 以请求 HTTP 标头