標籤:python ping 多線程 threading Queue
Python 編寫多線程 Ping 主機IP的指令碼1. 先編寫一個 Ping 主機IP的指令碼
ping_ip.py
import subprocessimport time# 記錄開始執行的時間start_time = time.time()# 定義用來 ping 的254 個 ipip_list = [‘10.3.1.‘+str(i) for i in range(1,255)] for ip in ip_list: res = subprocess.call(‘ping -n 2 -w 5 %s‘ % ip,stdout=subprocess.PIPE) # linux 系統將 ‘-n‘ 替換成 ‘-c‘ print(ip,True if res == 0 else False)print(‘執行所用時間:%s‘ % (time.time() - start_time))
2. 改造成多線程的指令碼
ping_threading.py
import threadingimport subprocessimport timefrom queue import Queue# 定義背景工作執行緒WORD_THREAD = 50# 將需要 ping 的 ip 排入佇列IP_QUEUE = Queue() for i in range(1,255): IP_QUEUE.put(‘10.3.1.‘+str(i))# 定義一個執行 ping 的函數def ping_ip(): while not IP_QUEUE.empty(): ip = IP_QUEUE.get() res = subprocess.call(‘ping -n 2 -w 5 %s‘ % ip,stdout=subprocess.PIPE) # linux 系統將 ‘-n‘ 替換成 ‘-c‘ # 列印運行結果 print(ip,True if res == 0 else False)if __name__ == ‘__main__‘: threads = [] start_time = time.time() for i in range(WORD_THREAD): thread = threading.Thread(target=ping_ip) thread.start() threads.append(thread) for thread in threads: thread.join() print(‘程式運行耗時:%s‘ % (time.time() - start_time))
3.運行效果對比
單線程的運行結果
50個線程的運行結果
Python多線程批量Ping主機IP的指令碼