如何使用结构在具有不同参数的多个主机上并行运行相同的任务?

时间:2016-04-08 02:27:54

标签: python python-2.7 parameters parallel-processing fabric

我是Fabric的新手,我打算用不同的主机(可能)和不同的参数运行任务。我设置了主机列表

env.hosts = ['host1', 'host1', 'host2', 'host3']
env.passwords = {
    'host1:22': 'password1',
    'host1:22': 'password1',
    'host2:22': 'password2',
    'host3:22': 'password3'
}

我使用相同的参数并行运行任务并且只获得三个输出,可能在env中配置了相同的主机和密码。实际上,分配给任务的每个参数都不同,但我只能通过在shell中输入fab function:parameter来指定相同的参数 那么我可以像env.hosts或env.passwords一样配置参数,可能是这样的吗?

env.parameters = ['para1', 'para2', 'para3', 'para4']  

谢谢

1 个答案:

答案 0 :(得分:0)

列表的set()仅由3个不同的主机组成。所以你只需要运行3次命令。 Fabric会自动重复删除主机列表。

如果您想更改此设置,则可能需要开始使用execute()功能。 Here是有关此功能的文档中的部分。

您希望如何使用它的示例就像这样

env.hosts = ['host1', 'host1', 'host2', 'host3']
env.passwords = {
    'host1:22': 'password1',
    'host1:22': 'password1',
    'host2:22': 'password2',
    'host3:22': 'password3'
}
env.parameters = ['para1', 'para2', 'para3', 'para4']  

def bar(arg):
    #do some work with arg

def foo():
    for index, host in enumerate(env.hosts):
        execute(bar, env.parameters[index] hosts=host)