openYuanrong 官网官网gitcode仓库仓库使用资源用量限制任务并发数量作业无状态和有状态默认占用cpu500 毫核和memory500 MiB。当一个作业需要的算力超过配置好的资源量时很可能受其他并发执行作业的影响导致该作业执行变慢但它依然可以稳定地执行完毕。这些作业对内存的占用会同比例增长而这会导致总的资源用量超出节点的内存阈值或者导致 OOM。为了避免这个问题可通过配置更大的资源量降低单节点上的并发作业数量为作业的执行提供资源冗余量。openYuanrong 的调度机制会保证所有并发执行的作业请求的资源总量不超过节点的阈值。使用示例示例展示了一种使用 openYuanrong 的分布式调用加载大文件到内存中并处理数据的方法。当这种作业并发量过大会导致 OOM。使用 openYuanrong 显式地为每个函数设置memory和cpu资源大小以限制函数的并发数。:::{note}内存资源是逻辑定义不是物理定义。openYuanrong 不会强制作业执行时内存用量在memory显示请求量以内。:::importyrimporttime# 初始化 yryr.init()# 1GB 1024 * 1024 * 1024 bytes# 模拟一个处理大文件的函数yr.invokedefprocess_large_file(file_name):print(f正在处理文件:{file_name}预计占用内存 3GB...)# 模拟加载 3GB 数据到堆内存中# 在实际场景中这可能是 pd.read_csv() 或 np.load()dataX*(3*1024*1024*1024)time.sleep(5)# 模拟计算耗时result_sizelen(data)# 释放大对象引用帮助 GC 及时回收deldatareturnf文件{file_name}处理完成大小:{result_size//(1024**3)}GB# --- 调度逻辑 ---file_list[ffile_{i}.datforiinrange(10)]pending_refs[]max_in_flight3# 我们设置逻辑需求为 4GB为内存抖动留出空间optyr.InvokeOptions()opt.memory4*1024print(开始分批处理大文件...)forfileinfile_list:# 如果在途任务太多先等待完成一个腾出逻辑资源位iflen(pending_refs)max_in_flight:ready,pending_refsyr.wait(pending_refs,wait_num1)print(f完成任务:{yr.get(ready[0])})# 提交任务# yr 会检查当前节点剩余的 memory 资源是否满足 4GB# 如果不满足此任务会保持 Pending 状态直到其他任务释放资源refprocess_large_file.options(opt).invoke(file)pending_refs.append(ref)# 等待剩余任务resultsyr.get(pending_refs)print(所有大文件处理完毕)yr.finalize()