上一篇文章讲了使用python fabric ssh连接EC2,并且使用ThreadPoolExecutor线程池执行器进行并发:
https://blog.youkuaiyun.com/zhang_jiamin/article/details/149581104?spm=1011.2415.3001.5331
其实fabric 自己也提供了并发的方法Group。
SerialGroup
from fabric import SerialGroup
for conn in SerialGroup('host1', 'host2', user='ec2-user'):
conn.run('bash start_viewer.sh')
- SerialGroup 是 Fabric 的高级 API,可以一次连接多个主机,并串行执行命令。
- 上面的代码是串行执行,即在 host1 上执行完后,才会执行 host2 上的命令。
Group
from fabric import Group
group = Group('host1', 'host2', user='ec2-user')
group.run('bash start_viewer.sh') # 并发执行
项目 | SerialGroup / Group (Fabric) | ThreadPoolExecutor + 自定义函数 |
---|---|---|
用途 | SSH 连接并运行远程命令 | 灵活执行任意函数(包括 SSH、业务逻辑等) |
并发性 | SerialGroup: 串行 Group: 并发 | 并发(线程池控制) |
简洁性 | 非常简洁,适合纯 SSH 脚本场景 | 自由度高,适合复杂逻辑 |
可控性 | 错误处理受限,结果收集不灵活 | 可以自由控制每个线程的行为 |
工具依赖 | 依赖 Fabric 和其传输协议 | 标准库 + 你选的 SSH 库(如 Paramiko) |
总结
如果只需要在几个主机上执行简单的 Bash 脚本,用 Group(…).run(…) 很方便。
如果需要对每个连接结果进行处理、限流、异常捕捉等,更推荐 ThreadPoolExecutor + 自定义函数。