import paramiko, threading
import queue
import pymysql


class ThreadPool(object):
    def __init__(self, maxsize):
        self.maxsize = maxsize
        self._q = queue.Queue(self.maxsize)
        for i in range(self.maxsize):
            self._q.put(threading.Thread)

    def getThread(self):
        return self._q.get()

    def addThread(self):
        self._q.put(threading.Thread)


def ssh_fun(ip, user, password, pool, db):
    cursor = db.cursor()
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip, 22, user, password)
        stdin, stdout, stderr = ssh.exec_command('hostname')
        info = stdout.read().decode().strip()
        print('IP:%s  hostname:%s' % (ip, info))
        try:
            cursor.execute(
                'insert into server_status(ip,password,hostname) values ("%s","%s","%s")' % (ip, password, info))
            db.commit()
        except:
            db.rollback()
        ssh.close()
    except Exception:
        print('sorry I can`t connect this server [%s]' % ip)
    pool.addThread()


if __name__ == '__main__':
    t_list = []
    pool = ThreadPool(3)
    db = pymysql.connect('192.168.32.188', 'hjc', '111111', 'hjc')
    with open('aaa', 'r+', encoding='utf-8') as f:
        for line in f:
            split = line.split()
            ip, user, password = split[0], split[1], split[2]
            th = pool.getThread()
            t = th(target=ssh_fun, args=(ip, user, password, pool, db))
            t.start()
            t_list.append(t)
    for i in t_list:
        i.join()
    db.close()