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 工做已完成