使用模块队列队列控制访问全局变量
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 (); 打印完的成” ~
批量测试脚本