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异步回调机制实现和使用方法
Nov 26 Python
Python生成器(Generator)详解
Apr 13 Python
详解python进行mp3格式判断
Dec 23 Python
Python中字典和集合学习小结
Jul 07 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Python 通配符删除文件的实例
Apr 24 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
Python下划线5种含义代码实例解析
Jul 10 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 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扩展编写点滴 技巧收集
2010/03/09 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
php intval函数用法总结
2019/04/14 PHP
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python中使用mysql数据库详细介绍
2015/03/27 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python中int与str互转方法
2018/07/02 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
旅游专业职业生涯规划范文
2014/01/13 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
安全责任书范本
2014/04/15 职场文书
项目建议书模板
2014/05/12 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
财务统计员岗位职责
2015/04/14 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
python接口测试返回数据为字典取值方式
2022/02/12 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers