首页 > 自动化运维 > python > Python 多线程批量执行命令
2015
04-30

Python 多线程批量执行命令

前言

  在之前的博客中我们写过单线程执行命令,但是随着服务器的增加,单线程执行似乎满足不了我们的需求,所有今天写了一个多线程的样例,其中还有很多不足,后期继续改进。


多线程批量执行代码

#!/usr/bin/env python
#coding=utf8
#author zhaodong
#site www.tshare365.com
import paramiko,sys
import threading
#定义变量信息
port=22
user='root'
#定义IP执行列表
IPS = [
    '10.10.73.33',
    '10.10.69.90',
    '10.10.69.34',
    '10.10.69.220',
]
#将远程执行的命令添加到列表中
cmds = [
    'date',
]
def loop(n,m):
    for i in range(n,m):
        ip=IPS[i]
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip,port,user,timeout=5)
        print '---------------------------------'+ip+'----------------------------'
        for m in cmds:
            print m
            stdin,stdout,stderr = ssh.exec_command(m)
            for line in  stdout.readlines():
                #print line,
                print threading.currentThread().getName(), ':', line,
        ssh.close()
def main():
#这里使用多线程执行命令,每个线程分配一部分IP
        t = threading.Thread(target=loop,args=(0,2))
        f = threading.Thread(target=loop,args=(2,4))
        t.start()
        t.getName()
        f.start()
        f.getName()
        t.join()
        f.join()
if __name__ == '__main__':
            main()

执行效果演示

1.png

我们看到是线程是轮询输出结果的,说明多线程是成功的。

总结

  此脚本还有许多不足之处,比如说是多线程的时候还需要手动去传参数,这个有点恶心。如果你有更好的建议,欢迎交流,一起进步!!!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复