热门标签 | 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()


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



      推荐阅读
      • 开发笔记:python协程的理解
        篇首语:本文由编程笔记#小编为大家整理,主要介绍了python协程的理解相关的知识,希望对你有一定的参考价值。一、介绍什么是并发?并发的本质就是 ... [详细]
      • 一、死锁现象与递归锁进程也是有死锁的所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作 ... [详细]
      • java多线程获取线程返回结果
        我们在使用java多线程编写相关业务代码时,往往有这样一种情况,某个线程依赖于其他线程执行结果。也就是说,我们需要在一个线程中获取另一个线程的信息。可以分为两种情况,一种是轮询,一 ... [详细]
      • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
      • Java容器中的compareto方法排序原理解析
        本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
      • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
      • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
      • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
      • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
      • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
      • java线程池的实现原理源码分析
        这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
      • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
      • python中不同的异常类型,如何进行异常处理?
        一、错误与异常程序中难免会出现错误,而错误分为两种1.语法错误:(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)2.逻辑错误:(逻辑错误),比如用户输入 ... [详细]
      • Python如何调用类里面的方法
        本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
      • 在 IMDB 情感分类任务上训练双向 LSTM
        代码如下在这里插入代码片from__future__importprint_functionimportnumpyasnpfromkeras.preprocessingimpo ... [详细]
      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社区 版权所有