点击上方蓝字 ● 关注捷创源科技

问题描述
在某些问题背景下,需要确认是否多台终端在线,也就是会使用我们牛逼的ping这个命令,做一些的ping操作,如果需要确认的设备比较少,也还能承受。倘若,在手中维护的设备很多,那么这无疑会变成一个恼人的问题。脚本的作用就凸显了。另外,我们需要使用多线程的一种措施,否则单线程很难在很短的时间内拿到统计结果。
应用背景
有多台设备需要维护,周期短,重复度高;
单台设备配备多个IP,需要经常确认网络是否通常;
等等其他需要确认网络是否畅通的地方
1.采用单线程问题解决
import timeimport osstatus1 = 'ping success'status2 = 'ping fail'def pingComputer():for i in range(1, 256):host = '192.168.2.' + str(i)nowTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))p = os.popen("ping " + host + " -n 2")line = p.read()# print(line)if "无法访问目标主机" in line:print(nowTime, host, status2)else:print(nowTime, host, status1)"""========================================主函数功能测试========================================"""if __name__ == '__main__':pingComputer()
"""=== coding: UTF8 ==="""# 线程池:一次性开辟一些线程,我们用户直接给线程池提交任务,线程任务的调度交给线程池来完成from concurrent.futures import ThreadPoolExecutorimport timeimport os# 成功标志状态status1 = 'ping success'# 失败标志状态status2 = 'ping fail'# 成功ping通IP列表listHostSuccess = []# 失败ping不通IP列表listHostFail = []def pingComputer(host):nowTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))p = os.popen("ping " + host + " -n 2")line = p.read()# print(line)if "无法访问目标主机" in line:listHostFail.append(host)print(nowTime, host, status2)else:listHostSuccess.append(host)print(nowTime, host, status1)def printResult():print(f"ping通:{len(listHostSuccess)}个")print(listHostSuccess)print(f"ping不通:{len(listHostFail)}个")print(listHostFail)"""========================================主函数功能测试========================================"""if __name__ == '__main__':# 创建线程池,50个线程with ThreadPoolExecutor(50) as pool:for i in range(1, 256): # 255个IPpool.submit(pingComputer, host=f"192.168.2.{i}")# 等待线程池中的任务全部执行完毕,才能继续执行(守护)print("完毕")# 打印结果printResult()
关注上面微信公众号“捷创源科技”,每天获取技术干货,让我们一起成长!
文章转载自捷创源科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




