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

系统运维

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

suprocess 创建子进程生成多个shell

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

#!/usr/bin/python
#-*-?coding:?utf-8?-*-?
from?threading?import?Thread
import?subprocess
from?Queue?import?Queue
import?pymysql
num_threads=10
q=Queue()
def?pingme(i,queue):
while?True:
ip=queue.get()
ret=subprocess.call(\\\'ping?-c?1?%s\\\'?%?ip[0],shell=True,stdout=open(\\\'/dev/null\\\',\\\'w\\\'),stderr=subprocess.STDOUT)
#[接受变量字符串为命令,ping发送一个ICMP请求,并且将标准输出重定向到/dev/null,相当于丢弃,并且将标准错误输出重新定向到标准输出。
这条语句返回其实就是ping值,就是python程序先创建shell进程,shell创建ping进程,ping进程运行返回值被shell等待,shell返回值给
python程序wait,如果成功则为0.]
if?ret==0:
print?\\\'%s-%s?is?up!\\\'?%(ip[1],ip[0])
elif?ret==1:
print?\\\'%s?is?down...\\\'%(ip[1],ip[0])
queue.task_done()
#start?num_threads?threads
for?i?in?range(num_threads):
t=Thread(target=pingme,args=(i,q))#多线程调用
t.setDaemon(True)?#设置守护线程
t.start()
db?=?pyMysql.connect(
host=10.50.99.247,
user=network,
passwd=xxxx,
port=3306,
db=network,
charset=\\\'utf8\\\')
cursor?=?db.cursor()
cursor.execute(select?ipadd,name?from?net_dev?where?`group`?like?\\\'xxx%\\\'?)
data?=?cursor.fetchall()
for?i?in?data:
q.put(i)?#上传列表
q.join();
print?\\\'完成\\\'
~

批量测试脚本

更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » python 多线程ping 2秒ping完500个ip地址

登录

找回密码

注册