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中 ? : 三元表达式的使用介绍
Oct 09 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
详解Python字符串切片
May 20 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
Python Django基础二之URL路由系统
Jul 18 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python 实现return返回多个值
Nov 19 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Python爬虫+Tkinter制作一个翻译软件的示例
Feb 20 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python内存管理分析
2015/04/08 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
详解Python IO口多路复用
2020/06/17 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
返乡农民工证明
2015/06/24 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android