python 多线程实现检测服务器在线情况


Posted in Python onNovember 25, 2015

需要ping一个网段所有机器的在线情况,shell脚步运行时间太长,用python写个多线程ping吧,代码如下:

#!/usr/bin/python
#coding=utf-8
'''
Created on 2015-8-4
@author: Administrator
'''

import threading,subprocess
from time import ctime,sleep,time
import Queue

queue=Queue.Queue()

class ThreadUrl(threading.Thread):
  def __init__(self,queue):
    threading.Thread.__init__(self)
    self.queue=queue

  def run(self):
    while True:
      host=self.queue.get()
      ret=subprocess.call('ping -c 1 -w 1 '+host,shell=True,stdout=open('/dev/null','w'))
      if ret:
        print "%s is down" % host
      else:
        print "%s is up" % host
      self.queue.task_done()

def main():
  for i in range(100):
    t=ThreadUrl(queue)
    t.setDaemon(True)
    t.start()
  for host in b:
    queue.put(host)
  queue.join()

a=[]
with open('ip.txt') as f:
  for line in f.readlines():
    a.append(line.split()[0])
  #print a

b=['192.168.3.'+str(x) for x in range(1,254)] #ping 192.168.3 网段
start=time()
main()
print "Elasped Time:%s" % (time()-start)

#t2=threading.Thread(target=move,args=('fff',))
#threads.append(t2)

'''
for i in a:
  print ctime()
  ping(i)
  sleep(1)

if __name__ == '__main__':
  for t in range(len(a)):
    #t.setDaemon(True)
    threads[t].start()
    #t.join()
  print "All over %s" % ctime()
'''

效果如下:

python 多线程实现检测服务器在线情况

平一个网段只要2.7s左右,够快!!!

再给大家分享一个检测外网服务器的方法及代码

经常使用python检测服务器是否能ping通, 程序是否正常运行(检测对应的端口是否正常)

    以前使用shell脚本的写法如下:

    PINGRET=$( ping www.baidu.com -c 2 | grep "icmp_" );  if [ -z $PINGRET ]; then echo "ping fail"; else echo "ping ok"; fi

    或者

     ping -c 2 www.baidu.com|grep "icmp_" && echo 'ping ok' || echo 'ping fail'

    代码示例:

#!/usr/bin/python
# encoding=utf-8
# Filename: net_is_normal.py
import os
import socket
import subprocess
 
 
#判断网络是否正常
server='www.baidu.com'
#检测服务器是否能ping通,在程序运行时,会在标准输出中显示命令的运行信息
def pingServer(server):
  result=os.system('ping '+server+' -c 2')
  if result:
    print '服务器%s ping fail' % server
  else:
    print '服务器%s ping ok' % server
  print result
 
#把程序输出定位到/dev/null,否则会在程序运行时会在标准输出中显示命令的运行信息 
def pingServerCall(server):
  fnull = open(os.devnull, 'w')
  result = subprocess.call('ping '+server+' -c 2', shell = True, stdout = fnull, stderr = fnull)
  if result:
    print '服务器%s ping fail' % server
  else:
    print '服务器%s ping ok' % server
  fnull.close()
   
#可用于检测程序是否正常,如检测redis是否正常,即检测redis的6379端口是否正常
#检测ssh是否正常,即检测ssh的22端口是否正常
def check_aliveness(ip, port):
  sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  sk.settimeout(1)
  try:
    sk.connect((ip,port))
    print 'server %s %d service is OK!' %(ip,port)
    return True
  except Exception:
    print 'server %s %d service is NOT OK!' %(ip,port)
    return False
  finally:
    sk.close()
  return False
   
if __name__=='__main__':
  pingServerCall(server)
  pingServer(server)
  check_aliveness('192.168.230.128', 6379)
Python 相关文章推荐
python实现计算资源图标crc值的方法
Oct 05 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python交互界面的退出方法
Feb 16 Python
Python读写文件基础知识点
Jun 10 Python
python实现接口并发测试脚本
Jun 25 Python
ERLANG和PYTHON互通实现过程详解
Jul 05 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
python神经网络 使用Keras构建RNN训练
May 04 Python
如何基于python实现单目三维重建详解
Jun 25 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 #Python
简单解决Python文件中文编码问题
Nov 22 #Python
Python制作简单的网页爬虫
Nov 22 #Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 #Python
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 #Python
详解Python编程中time模块的使用
Nov 20 #Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 #Python
You might like
杏林同学录(四)
2006/10/09 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
JavaScript 学习笔记(五)
2009/12/31 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python中的类与类型示例详解
2019/07/10 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
python加载自定义词典实例
2019/12/06 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
国家助学贷款承诺书
2015/04/30 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
欠条格式范本
2015/07/03 职场文书