角色管理以及并行执行(2)

这个是收益非常明显的 - 如果花费了 5s 运行 以及 2s 重载。串行执行会花费 (5+2)*3=21s的时间,而并行执行仅仅只需要花费其三分之一的时间,平均(5+2)=7s左右。

怎么使用并行

因为并行执行影响一个任务是最小的单元。这个功能可以通过使用 和 装饰符来控制开关。例如, fabfile 如下:

from fabric.api import * #并行执行任务 @parallel def runs_in_parallel(): pass #串行执行任务 def runs_serially(): pass

当按照下面这种方式运行的时候:

$ fab -H host1,host2,host3 runs_in_parallel runs_serially

连续执行的结果如下:

runs_in_parallel on host1, host2, and host3

runs_serially on host1

runs_serially on host2

runs_serially on host3

命令行标记

你可以通过使用命令行标记 或者是环境变量 强制所有的任务并行执行,尽管如此,任何使用 特别标记了的任务,都将忽略并行标记,继续串行执行。

例如:

from fabric.api import * def runs_in_parallel(): pass @serial def runs_serially(): pass

当这样调用的时候:

$ fab -H host1,host2,host3 -P runs_in_parallel runs_serially

如以前,runs_in_parallel 并行执行,runs_serially 串行执行。

Bubble size (队列池样的概念?)

在大批量主机的情况下,用户的 Fabric 本地主机因为运行了太多的 Fabric 进程可能会不堪重负,导致 Fabric 主机负载太高。因为这个,你可能需要选择一个 moving bubble 的方法来限制 Fabric 活跃并行进程的指定数量。

默认的情况下,Fabric 是没有 bubble 被使用的,所有的主机运行在一个并行池里��。你可以通过为没一个任务给 来指定 pool_size 关键字来重写它。或者是通过全局的 来设置。

例如,在某一时间运行5台主机:

from fabric.api import * @parallel(pool_size=5) def heavy_task(): # lots of heavy local lifting or lots of IO here #

或者是跳过 pool_size 参数,用如下代替:

$ fab -P -z 5 heavy_task

使用 Vagrant 和 Fabric 用于集成测试

Fabric:Python远程部署工具

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/38a7283d148b0994f696f373a3b198be.html