python程序同时ping多个地址_python 多线程ping 2秒ping完500个ip地址

该脚本利用Python的多线程和queue模块,通过ping命令快速检查大量设备的网络连通性。从企业配置库读取IP地址和设备名,将任务放入队列,每个线程取出IP进行ping操作。成功则打印设备在线,失败则标记为离线。最终完成所有设备的检查。
摘要由CSDN通过智能技术生成

使用模块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 '完成'

~

批量测试脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值