#!/usr/bin/env python
# -*- coding:utf-8 -*-
import subprocess
import logging
import datetime
import time
import threading
try:
# Python3
from queue import Queue
except ImportError:
# Python2
from Queue import Queue
def set_logging_format():
logging.basicConfig(level=logging.INFO,
format=‘%(message)s‘,
filename="ping_host.log",
filemode=‘w‘
)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(‘%(message)s‘)
console.setFormatter(formatter)
logging.getLogger(‘‘).addHandler(console)
# 将需要 ping 的 ip 加入队列
def insert_ip_queue(hosts_list_path):
IP_QUEUE = Queue()
with open(hosts_list_path, "r") as f:
for host in f.readlines():
IP_QUEUE.put(host)
return IP_QUEUE
# 定义一个执行 ping 的函数
def ping_host(IP_QUEUE):
while not IP_QUEUE.empty():
ip = IP_QUEUE.get().strip("\n")
popen = subprocess.Popen(‘ping -c 1 -w 1 %s‘ %ip, stdout=subprocess.PIPE,shell=True)
popen.wait()
res = popen.stdout.read()
if "1 received" in res:
res = "success"
else:
res = "fail"
today = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
logging.info("%s %s %s" % (today,ip,res ))
if __name__ == ‘__main__‘:
set_logging_format()
hosts_list_path = "./sgdev-hostip.txt"
# 定义工作线程
WORD_THREAD_NUM = 30
while True:
IP_QUEUE = insert_ip_queue(hosts_list_path)
threads = []
for i in range(WORD_THREAD_NUM):
thread = threading.Thread(target=ping_host,args=(IP_QUEUE,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
#print("******next run************************************")
time.sleep(30)
查看更多关于python多线程实现ping多个ip的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did170467