python 实现多线程ping检测服务器状况

  原理:设置一个adress列表,而后把ip传到定义的函数里面执行,使用queue队列实现多线程,很简单,很少说了,看代码python


[root@localhost ~]# cat ping.py
#coding:utf8
import os
import threading
import Queue
queue = Queue.Queue()
address = ['202.105.182.55','202.105.182.53','202.105.182.51','202.105.182.48']
_thread = 3
for ip in address:
        queue.put(ip)    #将IP放入队列中。函数中使用q.get(ip)获取
def check(i,q):
        while True:
                ip=q.get() #获取Queue队列传过来的ip,队列使用队列实例queue.put(ip)传入ip,经过q.get() 得到
                print "Thread %s:Pinging %s" %(i,ip)
                data = os.system("ping -c 1 %s > /dev/null 2>&1" % ip)#使用os.system返回值判断是否正常
                if data==0:
                        print "%s:正常运行" % ip
                else:
                        print "%s:中止工做" % ip
                q.task_done() #表示queue.join()已完成队列中提取元组数据
for i in range(_thread):#线程开始工做
        run=threading.Thread(target=check,args=(i,queue)) #建立一个threading.Thread()的实例,给它一个函数和函数的参数
        run.setDaemon(True)#这个True是为worker.start设置的,若是没有设置的话会挂起的,由于check是使用循环实现的
        run.start()     #开始线程的工做
queue.join()#线程队列执行关闭
print "ping 工做已完成"



运行查看多线程


[root@localhost ~]# python ping.py
Thread 0:Pinging 202.105.182.55
Thread 1:Pinging 202.105.182.53
Thread 2:Pinging 202.105.182.51
202.105.182.53:正常运行
Thread 1:Pinging 202.105.182.48
202.105.182.55:正常运行
202.105.182.51:正常运行
202.105.182.48:正常运行
ping 工做已完成