1. 程式人生 > 實用技巧 >Python多執行緒批量Ping主機IP的指令碼

Python多執行緒批量Ping主機IP的指令碼



Python 編寫多執行緒 Ping 主機IP的指令碼

1. 先編寫一個 Ping 主機IP的指令碼

ping_ip.py

import subprocess
import time

# 記錄開始執行的時間
start_time = time.time()

# 定義用來 ping 的254 個 ip
ip_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 threading
import subprocess
import time
from 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個執行緒的執行結果