有没有办法在多个并行任务之间动态修改主机?这是我到目前为止所做的。
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
env.hosts.remove(env.host)
@parallel
def task_2():
run('uname -s')
显然我缺少一些env
个参数,但我只希望task_2
在满足task_1
条件的主机上运行。看起来task_2
的主机列表在启动时被初始化,因为它在env.hosts
中定义的初始init_hosts()
列表中的所有主机上运行。我也尝试过动态修改和构建roledef,但结果相同。
编辑:另外,有没有办法设置并行执行队列,以便并行执行多个并行任务而不是按顺序执行?
编辑:我设法通过让每个任务返回输出来获得我想要的最终结果,并解析输出以构建新的主机列表以传递给execute():
def init_hosts():
env.hosts = [host1,host2,host3,host4]
@parallel
def task_1():
if condition is False:
return False
else:
return True
@parallel
def task_2():
run('uname -s')
def run_tests():
results = execute(task_1)
successful_hosts = [k for k in results.iterkeys() if results[k]]
execute(test_2, hosts=successful_hosts)
这很有效,但由于很多原因,这很糟糕。还有更好的方法吗?
答案 0 :(得分:3)
并行执行使用fork,因此不共享(返回)状态更改。因此,在一个并行运行的任务中更改env变量不会影响该任务运行的任何其他实例,也不会在调用之前更改全局设置的任何内容。
如果所有task_1都在进行检查,为什么不将这个逻辑合并到task_2?