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

如何按可用区循环遍历字典生成指定数量的服务器名称列表

实现思路
  • 先做数据规整:固定可用区轮询优先级为eu-west0-a→eu-west0-b→eu-west0-c,把原始字典里的服务器按所属可用区分组,每组内按服务器名称排序,保证取数顺序稳定。
  • 轮询取数逻辑:从第1台开始计数,每台机器对应的可用区为「计数序号对可用区总数取模」对应的优先级AZ,每次从对应AZ的服务器列表里按顺序取未被选中的机器,直到取够用户请求的数量。
  • 结果输出:如果只需要服务器名列表直接返回选中的名称即可,需要带可用区备注的话可以在输出时拼接原始映射里的AZ信息。

注意:如果请求的服务器总数超过所有可用区服务器总和,或者单个AZ的服务器被取空时,需要根据业务场景加异常处理,比如提示资源不足、循环复用同AZ服务器等。

可直接运行的Python实现
from collections import defaultdict

# 原始服务器与可用区映射数据
server_map = {
    "v3bf33-srv01": "eu-west0-a",
    "v3bf33-srv02": "eu-west0-a",
    "v3bf33-srv03": "eu-west0-a",
    "v3bf33-srv04": "eu-west0-b",
    "v3bf33-srv05": "eu-west0-b",
    "v3bf33-srv06": "eu-west0-b",
    "v3bf33-srv07": "eu-west0-c",
    "v3bf33-srv08": "eu-west0-c",
    "v3bf33-srv09": "eu-west0-c"
}

def get_selected_servers(request_count: int) -> list:
    # 固定可用区轮询顺序
    az_priority = ["eu-west0-a", "eu-west0-b", "eu-west0-c"]
    # 按可用区分组服务器,组内按名称排序
    az_server_group = defaultdict(list)
    for srv_name, az in server_map.items():
        az_server_group[az].append(srv_name)
    for az in az_priority:
        az_server_group[az].sort()
    
    selected = []
    # 每个可用区维护独立的取数指针
    az_index = {az: 0 for az in az_priority}
    for i in range(request_count):
        # 轮询定位当前要取的可用区
        current_az = az_priority[i % len(az_priority)]
        # 取对应可用区指针位置的服务器,指针后移
        current_srv = az_server_group[current_az][az_index[current_az]]
        az_index[current_az] += 1
        selected.append(current_srv)
    return selected

# 测试:请求5台服务器
if __name__ == "__main__":
    server_list = get_selected_servers(5)
    # 输出带可用区备注的yaml格式结果
    for srv in server_list:
        print(f"- {srv}    #{server_map[srv]}")
执行效果

运行上述代码请求5台服务器时,输出完全匹配需求示例:

- v3bf33-srv01    #eu-west0-a
- v3bf33-srv04    #eu-west0-b
- v3bf33-srv07    #eu-west0-c
- v3bf33-srv02    #eu-west0-a
- v3bf33-srv05    #eu-west0-b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:18:21