ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何并发管理上千台设备?scrapli异步API(async)完整实战指南

如何并发管理上千台设备?scrapli异步API(async)完整实战指南 如何并发管理上千台设备scrapli异步APIasync完整实战指南【免费下载链接】scrapliFast, flexible, sync/async, Python 3.10 screen scraping client specifically for network devices项目地址: https://gitcode.com/gh_mirrors/sc/scrapliscrapli 异步APIasync完整实战指南scrapli 是一个面向网络设备的 Python 3.10 屏幕抓取screen scraping库通过 Telnet / SSH / NETCONF 连接路由器、交换机、防火墙等设备内置 sync/async 双模式本文带你用 async 并发 API 同时管理上千台网络设备。为什么大规模设备管理需要「异步」想象一下你的机房里躺着 1000 台交换机你想知道每一台运行的系统版本。如果用传统同步写法程序会像排队买咖啡一样——连接第 1 台 → 发命令 → 等结果 → 再连第 2 台……每台花 1 秒1000 台就是16 分钟以上。而用scrapli 的 async API1000 个连接在同一时间并行推进某台设备在思考时程序立刻去服务另一台总耗时只取决于最慢的那台设备。这就是异步并发的核心价值。✅一句话结论设备越多scrapli 异步API 的优势越夸张。scrapli 异步底层为什么它快很多人以为Python 异步 慢其实相反。scrapli 的底层实现相当讲究详见 docs/details.md 的Async IO章节 底层库libscrapli用 Zig 编写为每个连接跑一条独立的读循环线程⚡ 传输层基于epoll/kqueue非阻塞等待不需要傻等字节 Python 侧发起异步操作时通过select监听一个通知文件描述符操作系统在结果就绪的瞬间唤醒你所以无论同步还是异步调用scrapli 都是高效路径异步只是把等待设备响应的时间释放出来给别的连接用。三步上手安装 scrapli 异步环境整个过程比泡一杯面还快 ☕️第 1 步确认 Python 版本scrapli 要求 Python 3.10 及以上async/await 的现代写法依赖新版语法。第 2 步一行命令安装pip install scrapli提示PyPI 上同时存在scrapli日历版本号和scrapli2语义化版本号两个包代码完全相同装任意一个即可详见 docs/installation.md。第 3 步准备设备信息scrapli 内置了几十种平台定义文件位于scrapli/definitions/目录比如arista_eos.yaml— Arista 交换机cisco_iosxe.yaml— Cisco IOS-XEnokia_srlinux.yaml— Nokia SR Linuxjuniper_junos.yaml— Juniper Junos这些 YAML 文件告诉 scrapli 如何识别该设备类型的提示符、如何进入配置模式、连接时先禁用分页等。你只需指定名字剩下的全自动。5 分钟快速上手建立第一个并发连接官方示例代码在 examples/cli/async_usage/main.py我们把它翻译成新手视角的三步走 第 1 步创建连接对象和同步写法一模一样from scrapli import AuthOptions, Cli cli Cli( definition_file_or_namenokia_srlinux, # 指定设备平台 host172.20.20.16, # 设备地址 port22, auth_optionsAuthOptions( usernameadmin, passwordNokiaSrl1!, ), )关键点不需要区分异步版的类——Cli一个类同时支持 sync 和 async非常省心。第 2 步用async with打开/关闭连接async with cli as c: r await c.send_input_async(input_show version)async with是上下文管理器退出时自动优雅关闭连接会按平台定义发送quit/exit等清理指令。第 3 步并发执行把 5 台设备的任务全部挂起谁先做完谁先返回coros [run(c) for c in clis] for coro in asyncio.as_completed(coros): i, r await coro print(f设备 {i} 完成结果:\n{r})as_completed保证程序永远在忙——连接 A 还没回数据时立刻去推进连接 B、C、D。唯一规则方法名加_async后缀这是整个 scrapli 异步API 中最简单的规则记住它你就掌握了 90%同步方法叫什么异步方法就叫什么 _async再用await调用。功能同步写法异步写法获取提示符get_prompt()await get_prompt_async()切换模式enter_mode()await enter_mode_async()发送单条命令send_input()await send_input_async()批量发送命令send_inputs()await send_inputs_async()处理交互提示send_prompted_input()await send_prompted_input_async()NETCONF 取配置get_config()await get_config_async()NETCONF 编辑配置edit_config()await edit_config_async()完整的 CLI 与 NETCONF 方法清单可在 docs/details.md 的Methods章节查到。进阶提示进入配置模式再发命令比如升级设备照样异步async with cli as c: await c.enter_mode_async(requested_modeconfiguration) await c.send_input_async(input_hostname new-switch)上千台设备加一层并发控制直接对 1000 台设备asyncio.gather当然可以但生产环境建议限制并发数避免瞬间打爆设备登录接口或自己的网络import asyncio sem asyncio.Semaphore(100) # 同时最多 100 台在连 async def collect(cli: Cli) - tuple[str, str]: async with sem: async with cli as c: r await c.send_input_async(input_show version) return cli.transport_options.host, r.result results await asyncio.gather(*(collect(c) for c in all_clis))这套模式Semaphore gather可以稳定支撑上千并发会话 1000 台设备批量巡检耗时从小时级压缩到分钟级 单进程内管理无需多进程/多容器 每台连接独立一台超时不影响其他设备配合timeout参数即可官方 examples/README.md 中还提供了输入模式、回调读取、会话录制等更多实战样例值得逐个翻一遍。常见陷阱与最佳实践别忘了await—— 忘了会拿到协程对象而不是结果这是新手第一坑连接用完就关——async with退出即关闭上千台设备建议查完即关不要长期挂连接用as_completed处理长尾—— 设备响应速度不均时先完成的先入库体验更顺滑超时一定要设—— 异步并发最怕一卡卡全部给每台连接合理的timeout同步场景别硬转—— 只连一两台设备时用同步 API 更简单async 是为规模而生的小结你的场景推荐姿势1~10 台设备随手查同步 API最简单几十~几百台批量巡检async gather上千台并发管理async Semaphore限流 as_completedscrapli 异步API的设计哲学非常克制同一个Cli类、同样的参数、方法名只加_async后缀——学习成本极低却能撬动上千设备的并发管理能力。配合内置的平台定义scrapli/definitions/和 Zig 编译的高性能底层库它堪称 Python 生态里做网络设备自动化并发管理的终极答案。现在打开终端pip install scrapli去试试你的第一批并发连接吧 【免费下载链接】scrapliFast, flexible, sync/async, Python 3.10 screen scraping client specifically for network devices项目地址: https://gitcode.com/gh_mirrors/sc/scrapli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表