python多线程平2秒平完500个ip地址

  

使用模块队列队列控制访问全局变量

suprocess创建子进程生成多个壳


此脚本可用于网络割接改造时判断各个设备的网络连通性,ip地址和设备名字均从企业配置库读取。利用队列控制变量读取。2秒之内快速平完




# !/usr/bin/python   # - * -编码:utf - 8 - *   从线程进口线程   导入子流程   从队列进口队列   进口pymysql   num_threads=10   q=队列()   队列def pingme(我):   而真正的:   ip=queue.get ()   ret=子流程。调用(ping - c 1%年代' % ip [0], shell=True, stdout=开放(/dev/null,“w”), stderr=subprocess.STDOUT)   #(接受变量字符串为命令,萍发送一个ICMP请求,并且将标准输出重定向到/dev/null,相当于丢弃,并且将标准错误输出重新定向到标准输出。   这条语句返回其实就是ping值,就是python程序先创建进壳程,壳牌创建萍进程,平进程运行返回值被壳牌等待,壳返回值给   python程序等,如果成功则为0。)   如果ret==0:   打印“% s - % s !% (ip [1], ip [0])   elif ret==1:   打印“% s下降…”% (ip [1], ip [0])   queue.task_done ()   #开始num_threads线程   因为我在范围(num_threads):   t=线程(目标=pingme args=(i, q) #多线程调用   t.setDaemon (True) #设置守护线程   t.start ()   db=pymysql.connect (   主机=" 10.50.99.247 ",   用户=巴纭?   passwd=皒xxx”,   端口=3306,   db=巴纭?   charset=' utf8)   光标=db.cursor ()   游标。执行(“选择ipadd,名字从net_dev xxx %”等“集团”)   data=cursor.fetchall ()   我的数据:   q.put (i) #上传列表   q.join ();   打印完的成”   ~

批量测试脚本

 python多线程平2秒平完500个ip地址”> <br/> </p><h2 class=python多线程平2秒平完500个ip地址