这个是收益非常明显的 - 如果花费了 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