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中apply函数的用法实例教程
Jul 31 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
Python 爬虫图片简单实现
Jun 01 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
python破解zip加密文件的方法
May 31 Python
Python解决走迷宫问题算法示例
Jul 27 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
python中的print()输出
Apr 12 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
pandas处理csv文件的方法步骤
Oct 16 Python
Python爬虫基础讲解之请求
May 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
浅谈js闭包理解
2019/03/28 Javascript
JS实现分页导航效果
2020/02/19 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
Python多线程实例教程
2014/09/06 Python
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
python实现在控制台输入密码不显示的方法
2015/07/02 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
对python生成业务报表的实例详解
2019/02/03 Python
详解Django admin高级用法
2019/11/06 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
简单英文演讲稿
2014/01/01 职场文书
三八节主持词
2014/03/17 职场文书
公司离职证明样本
2014/09/13 职场文书
成本会计实训报告
2014/11/05 职场文书
优秀英文求职信范文
2015/03/19 职场文书
离婚答辩状范文
2015/05/22 职场文书
清明节随笔
2015/08/15 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
i7 6700处理器相当于i5几代
2022/04/19 数码科技
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang