gpt4 book ai didi

python - Fabric 库的动态主机和并行任务

转载 作者:太空狗 更新时间:2023-10-29 17:50:51 27 4
gpt4 key购买 nike

有没有办法在多个并行任务之间动态修改主机?这是我目前所拥有的。

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 的主机列表似乎在启动时已初始化,因为它在 init_hosts() 中定义的初始 env.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)

这行得通,但出于多种原因它很恶心。有没有更好的办法?

最佳答案

并行执行使用 fork ,因此不共享(返回)状态更改。因此,在一个并行运行的任务中更改环境变量,不会影响该任务运行的任何其他实例,也不会更改调用它之前全局设置的任何内容。

如果 task_1 所做的只是检查,为什么不将此逻辑合并到 task_2 中呢?

关于python - Fabric 库的动态主机和并行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10602165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com