热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python多线程popenping指定IP是否在线判断连通

Python多线程popen应用场景:有多台设备需要维护,周期短,重复度高;单台设备配备多个IP,需要经常确认网络是否通常;等等其他需要确

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

问题描述

在某些问题背景下,需要确认是否多台终端在线,也就是会使用我们牛逼的ping这个命令,做一些的ping操作,如果需要确认的设备比较少,也还能承受。倘若,在手中维护的设备很多,那么这无疑会变成一个恼人的问题。脚本的作用就凸显了。另外,我们需要使用多线程的一种措施,否则单线程很难在很短的时间内拿到统计结果。

应用背景

有多台设备需要维护,周期短,重复度高;

单台设备配备多个IP,需要经常确认网络是否通常;

等等其他需要确认网络是否畅通的地方

1.采用单线程问题解决

    import time
    import os


    status1 = '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()

    2.采用多线程问题解决

      """=== coding: UTF8 ==="""
      # 线程池:一次性开辟一些线程,我们用户直接给线程池提交任务,线程任务的调度交给线程池来完成
      from concurrent.futures import ThreadPoolExecutor
      import time
      import 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个IP
      pool.submit(pingComputer, host=f"192.168.2.{i}")


      # 等待线程池中的任务全部执行完毕,才能继续执行(守护)
      print("完毕")


      # 打印结果
      printResult()


      关注上面微信公众号“捷创源科技”,每天获取技术干货,让我们一起成长!



      推荐阅读
      • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
        本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
      • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
      • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
      • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
      • 从 .NET 转 Java 的自学之路:IO 流基础篇
        本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
      • 优化ListView性能
        本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
      • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
      • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
      • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
      • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
      • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
      • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
        学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
      • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
      • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
      • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
      author-avatar
      小荷蛋蛋图_945
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有