在使用ping命令ping多个网络地址时,一般是一个一个的ping,等待前一个结果出来后再ping后一个IP地址,本文使用python多线程写了一个简单的小程序,它支持同时ping多个IP地址。

需要注意的有以下几点:
1、本代码将要处理的IP地址放入了Queue中,而Queue是线程安全的,能够确保每一次操作都是原子操作。这样就省去了自己管理多线程资源申请的问题。
2、在pingIP地址时,使用了subprocess的call函数来调用ping命令。
subprocess的作用是开启子进程来执行命令。
3、ping -c 1 ip 命令的作用是只ping一次该IP地址就返回结果。

流程介绍

程序一开始开启三个子线程,每一个线程都执行函数pingme,进入一个循环等待中。
然后主线程将所有需要的IP塞到Queue中,q.join()的调用是用来等待队列中的所有元素确保都被处理,也就是主线程等待三个子线程的while循环都退出,子线程也退出了,主线程再继续执行。

代码如下:

from threading import Thread
import subprocess
from Queue import Queue  num_threads=3
ips=['127.0.0.1','192.168.3.119','183.232.231.173','183.232.231.174','183.232.231.175']
q=Queue()
def pingme(i,queue):while True:  ip=queue.get()  print 'Thread %s pinging %s' %(i,ip)  ret=subprocess.call('ping -c 1 %s' % ip,shell=True,stdout=open('/dev/null','w'),stderr=subprocess.STDOUT)  if ret==0:  print '%s is alive!' %ip  elif ret==1:  print '%s is down...'%ip  queue.task_done()  #start num_threads threads
for i in range(num_threads):  t=Thread(target=pingme,args=(i,q))  t.setDaemon(True)  t.start()  for ip in ips:  q.put(ip)
print 'main thread waiting...'
q.join();
print 'Done'

使用pyhton采用多线程方式ping IP相关推荐

  1. 查看自己的ip和采用什么方式上网(网通/电信)

    查看自己的ip和采用什么方式上网(网通/电信) http://www.whatchina.com/html/sip.asp 转载于:https://blog.51cto.com/xcf007/1611 ...

  2. 【多线程】给三个字母a、l、i,采用多线程的方式打印alialialiali。。。

    目录 1. 题目 2. 解析 1. 使用ReetrankLock和Condition 1. 思路 2. 代码实现 3. 控制台 2. 使用synchronized和AtomicInteger配合 1. ...

  3. python代理ip多进程_静听网+python爬虫+多线程+多进程+构建IP代理池

    目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但 ...

  4. 静听网+python爬虫+多线程+多进程+构建IP代理池

    目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但 ...

  5. VMware虚拟机采用桥接方式不能上网——都是共享神盾惹的祸!

    宿主机是XP,双网卡,一个连接互联网,另一个连接内部生产网,通过来回拔插网线,来切换不同的网络(不允许同时连接两个网络).连接互联网的网卡是Realtek RTL8169,IP是192.168.1.8 ...

  6. Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?

    Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型. 因为我们公司使用的内存数据库是自研的,按理说我对Redi ...

  7. 多线程批量ping服务器

    最近由于工作的需要写了个多线程批量ping服务器的脚本,如果服务器down了,自动发报警邮件(可以添加多收件人) 提示:程序网页显示可以能有缩进问题. multithreading_ping_host ...

  8. 如何用多线程方式,提高rabbitmq消息处理效率?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/qq_37936542/ article/details/82012991 问题描述:项目中接收到rabbitmq消息后,先进行 ...

  9. 41、Springboot 文件上传 采用Base64方式

    引入依赖 <dependency><groupId>commons-net</groupId><artifactId>commons-net</a ...

最新文章

  1. Java IO 性能优化大PK,什么场景用啥,都给你总结好啦!
  2. phpMyAdmin的配置
  3. ORA-02291: 违反完整约束条件 - 未找到父项关键字 解决方法
  4. 物联网Wi-Fi配网方式,你知道几种?
  5. Mac openCV环境搭建
  6. pySerial -- Python的串口通讯模块
  7. Java基础——深入理解ReentrantLock
  8. Set与WeakSet
  9. python生成词云图个人技术报告_【Python成长之路】词云图制作
  10. Linux mkdir 与 mkdir -p 的区别
  11. 配置的代理服务器未响应 电脑连不上网_手机、电脑为什么连不上网(断网)?...
  12. paip.c++读写ini文件.
  13. python调用通达信公式_通达信公式-主力雷达Python化
  14. 查看redis的Value值大小
  15. Spark History Server 架构原理介绍
  16. 22道接口测试面试题答案,记住轻松挑战年薪50万
  17. 设想一种防U盘病毒的方法,不知道是否管用
  18. Pytorch实现Bert模型
  19. 小傻蛋的妹妹跟随小甲鱼学习Python的第十节010
  20. escape()与unescape()

热门文章

  1. 刚买的新树莓派怎样用(树莓派新手入门)
  2. E575: viminfo: Illegal starting char in line:(z)
  3. Java-数据库编程技术(MySQL)
  4. 用遗传算法求解TSP问题
  5. Pycharm Statistic插件
  6. 【java多线程学习】多线程的基本概念
  7. html在线预览ppt excel,JavaScript实现Word、Excel、PPT在线预览
  8. sklearn聚类算法实现
  9. 【python 图像识别】图像识别从菜鸟走向大神系列1
  10. 数据分析实战 | 银行 “信贷” 客户的可视化分析