线程经典例题

线程处理批量问题
import threading
import time
import  paramiko

from paramiko.ssh_exception import NoValidConnectionsError, AuthenticationException
class IPThread(threading.Thread):
    def __init__(self,cmd,hostname,port=22,user='root'):
        super(IPThread, self).__init__()
        self.cmd=cmd
        self.hostname=hostname
        self.port=port
        self.user=user
    def conn(self):
        # ssh [email protected]
        # 创建一个ssh对象;
        client = paramiko.SSHClient()

        # 返回一个私钥对象
        private_key = paramiko.RSAKey.from_private_key_file('id_rsa')


        # 2. 解决问题:如果之前没有;连接过的ip, 会出现
        # Are you sure you want to continue connecting (yes/no)? yes
        # 自动选择yes
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            # 3. 连接服务器
            client.connect(hostname=self.hostname,
                           port=self.port,
                           username=self.user,
                           pkey=private_key
                          )
            # 4. 执行操作
            stdin, stdout, stderr = client.exec_command(self.cmd)
        except NoValidConnectionsError as e:
            print("连接%s失败"%(self.hostname))
        except AuthenticationException as e:
            print("%s密码错误"%(self.hostname))
        else:
            # 5. 获取命令的执行结果;
            result = stdout.read().decode('utf-8')
            print(result)
        finally:
            # 6. 关闭连接
            client.close()
def main():
    #用来储存所有的线程对象
    start_time = time.time()
    threads=[]
    for count in range(254):
        host='172.25.254.%s' %(count+1)
        t=IPThread(cmd='hostname',hostname=host)
        threads.append(t)
        t.start()
    #join方法,等待所有的子线程结束后执行结束
    [thread.join() for thread in threads]

    print('任务执行结束,执行时间为%s'%(time.time()-start_time))
if __name__ == '__main__':
    main()

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42725815/article/details/82717859
今日推荐