• python之multiprocessing(二):multiprocessing.Pool


    [实现:多进程paramiko]

    1.server_list.txt   :格式   HOST  PORT   USER   PASSWD

    localhost 22 root root
    193.168.49.144 22 root root

    2.get_server_list.py

    server_list_file = "server_list.txt"
    def get_serverlist_dic():
            server_dic = {}
            f = file(server_list_file)
            for line in f.readlines():
                    if len(line.strip()) == 0:break
                    server_dic[line.split()[0]] = line.split()[1:]
            f.close()
            return server_dic
    server_dic = get_serverlist_dic()
    #print server_dic

    3.single_paramiko.py

    #!/usr/bin/env python
    #encoding:utf8
    import paramiko
    import sys,os,time

    host = sys.argv[1]
    port = int(sys.argv[2])
    user = sys.argv[3]
    password = sys.argv[4]
    cmd = str(sys.argv[5])

    msg = "---------Result:%s----------" %host


    p_client = paramiko.SSHClient() #绑定实例
    p_client.load_system_host_keys() #加载本机HOST主机文件
    p_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
            p_client.connect(host,port,user,password,timeout=5)
            stdin,stderr,stdout = p_client.exec_command(cmd)

            cmd_result = stdout.read(),stderr.read()
            print msg

            for line in cmd_result:
                    print line,

    except paramiko.AuthenticationException,e:
            print msg
            print "message:" + str(e)
            sys.exit()
    except paramiko.BadHostKeyException,e:
            print msg
            print "Bad host key" + str(e)

            p_client.close()

    4.multi_async.py

    import multiprocessing
    import os,sys,time
    import get_server_list

    cmd = sys.argv[1]
    result = []

    def runCmd(h,port,user,passwd,command):

            cmd = "python single_paramiko.py %s %s %s %s %s" %(h,port,user,passwd,command)
            print cmd
            os.system(cmd)
    p = multiprocessing.Pool(processes=250)

    server_dic = get_server_list.server_dic

    for host,values in server_dic.items():
            ssh_port = values[0]
            username = values[1]
            password = values[2]
            result.append(p.apply_async(runCmd,(host,ssh_port,username,password,cmd,)))

    for res in result:
            res.get(timeout=35)

    5.实际运行

    [root@centos6 multiprocess]# python multi_async.py ls
    python single_paramiko.py 193.168.49.144 22 root root ls
    python single_paramiko.py localhost 22 root root ls
    ---------Result:localhost----------
     aaa.a
    anaconda-ks.cfg
    Desktop
    Documents
    Downloads
    install.log
    install.log.syslog
    .....

    .....
    ---------Result:193.168.49.144----------
     anaconda-ks.cfg
    Desktop
    Documents
    Downloads
    install.log
    install.log.syslog
    .....

    .....

    当你的才华还撑不起你的野心时,就应该静下心来学习! Think big!Look forward!
  • 相关阅读:
    有用学习网址
    Pivot运算符用于在列和行之间
    st_MES_InsertIntoSalaryManage
    I00033 消除游戏
    I00033 消除游戏
    PHP版本的Graphviz样例之集群流程图
    PHP版本的Graphviz样例之集群流程图
    Graphviz样例之集群流程图
    Graphviz样例之集群流程图
    Graphviz样例之UML图
  • 原文地址:https://www.cnblogs.com/iber/p/7770760.html
Copyright © 2020-2023  润新知