发布于 2015-10-05 04:26:09 | 569 次阅读 | 评论: 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