Python 长跑运动员跑得很长

Python 长跑运动员跑得很长,python,ansible,ansible-api,Python,Ansible,Ansible Api,当我使用ansible的python API在远程机器(数千台)上运行脚本时,代码是: runner = ansible.runner.Runner( module_name='script', module_args='/tmp/get_config.py', pattern='*', forks=30 ) 然后,我用 datastructure = runner.run() 这花的时间太长了。我想将数据结构stdout插入MySQL。我想要的是,一旦一台机器有返回数据,只

当我使用ansible的python API在远程机器(数千台)上运行脚本时,代码是:

runner = ansible.runner.Runner(
  module_name='script',
  module_args='/tmp/get_config.py',
  pattern='*',
  forks=30
)
然后,我用

datastructure = runner.run()
这花的时间太长了。我想将数据结构stdout插入MySQL。我想要的是,一旦一台机器有返回数据,只需将数据插入MySQL,然后插入下一个,直到所有机器都返回


这是个好主意,还是有更好的方法?

在所有计算机返回数据、无法联系或SSH会话超时之前,运行程序调用不会完成。考虑到这是针对1000台机器的,而您只需要并行运行30台机器(forks=30),那么运行脚本*Num\u machines/30完成大约需要时间。这符合你的期望吗

你可以把叉子的数目增加到一个更高的数目,让跑步者更快完成。我把它推进了100年代,没有太多问题

如果您想最大限度地了解正在发生的事情,并且不确定是否有一台机器阻碍了您,那么可以在python代码中连续运行每个主机


仅供参考-此模块和类在Ansible 2.0中已完全消失,因此您可能希望立即跳转以避免以后重写代码

我有另一种方法,将所有Ansible主机放入队列,然后使用线程执行while循环从队列获取ip。