python 實現多線程ping檢測服務器情況

  原理:設置一個adress列表,然後把ip傳到定義的函數裏面執行,使用queue隊列實現多線程,很簡單,不多說了,看代碼


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








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章