发布于 2015-10-05 04:26:09 | 609 次阅读 | 评论: 0 | 来源: 网络整理
fabfile 中可以方便使用的装饰器。
fabric.decorators.hosts(*host_list)¶该装饰器用于指定被装饰的函数执行在那台主机或哪些主机列表上。
例如:如果不在控制台覆盖相关参数的话,将会在 host1、host2 以及 host3 上执行 my_func,并且在 host1 和 host3 上都指定了登录用户。
@hosts('user1@host1', 'host2', 'user2@host3')
def my_func():
pass
hosts 接受 host 的参数列表(@hosts('host1'), @hosts('host1', 'host2'))或者一个 hosts 可迭代对象(@hosts(['host1', 'host2']))。
要注意,这个装饰器仅仅会设置函数的 .hosts 属性,which is then read prior to executing the function.
在 0.9.2 版更改: 可以接收一个可迭代对象作为唯一参数(@hosts(iterable)),不再要求这样写: @hosts(*iterable)。
fabric.decorators.parallel(pool_size=None)¶强制被装饰的函数并行执行而非同步执行。
该装饰器的优先级高于全局变量 env.parallel。如果函数还装饰了 serial 的话,依旧是它的优先级更高。
1.3 新版功能.
fabric.decorators.roles(*role_list)¶该装饰器用于定义(服务器)“角色”名,然后用于寻找对应的主机列表。
角色是定义在 env 中的键,其对应的值是一个或多个主机连接字符穿的列表。例如:不考虑控制台参数覆盖的话,my_func 将会在 webserver 和 dbserver 角色对应的主机列表上执行:
env.roledefs.update({
'webserver': ['www1', 'www2'],
'dbserver': ['db1']
})
@roles('webserver', 'dbserver')
def my_func():
pass
和 hosts 一样, roles 也接受参数列表,或者单个可迭代对象作为参数,其实现机制是设置 <function>.roles,同样类似于 hosts。
在 0.9.2 版更改: (和 hosts 一样)支持可迭代对象作为唯一参数。
fabric.decorators.runs_once(func)¶阻止函数多次执行的装饰器。
通过保存内部状态,使用该装饰器可以保证函数在每个 Python 解释器中只运行一次,通常在使用时它的作用都是“每个 fab 程序生命周期中只运行一次”。
任何被该装饰器装饰的函数在第二次、第三次……第 n 次执行时都会静默失败,并返回初次运行的结果。
注解
runs_once 无法和任务并行执行同时生效。
fabric.decorators.serial(func)¶强制被装饰的函数顺序执行,不并行执行。
该装饰器效果的优先级高于全局变量 env.parallel。如果任务同时被 serial 和 parallel 装饰器装饰,parallel 的优先级更高。
1.3 新版功能.
fabric.decorators.task(*args, **kwargs)¶将函数封装为新式任务的装饰器。
可以作为简单的、无参数的装饰器使用(@task 这样),也可以使用参数修订其行为(比如: @task(alias='myalias'))。
关于 new-style task 装饰器的使用请参见其文档。
在 1.2 版更改: 新增关键字参数 alias、aliases、task_class 和 default。详情参见 Arguments。
在 1.5 版更改: 新增关键字参数 name。
参见
~fabric.docs.unwrap_tasks`、 WrappedCallableTask