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 相关文章推荐
探索Python3.4中新引入的asyncio模块
Apr 08 Python
python对url格式解析的方法
May 13 Python
详解python3百度指数抓取实例
Dec 12 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
python实现简单图片物体标注工具
Mar 18 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
python pptx复制指定页的ppt教程
Feb 14 Python
Python urllib2运行过程原理解析
Jun 04 Python
python代码实现图书管理系统
Nov 30 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
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
详解Python做一个名片管理系统
2019/03/14 Python
python对矩阵进行转置的2种处理方法
2019/07/17 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
晚归检讨书
2014/02/19 职场文书
有关环保的标语
2014/06/13 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
信息合作协议书
2014/10/09 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
2014年财政工作总结
2014/12/10 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android