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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
Python实现多线程抓取妹子图
Aug 08 Python
python中异常报错处理方法汇总
Nov 20 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
django解决跨域请求的问题详解
Jan 20 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
python3.6生成器yield用法实例分析
Aug 23 Python
详解Python time库的使用
Oct 10 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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 分页原理详解
2009/08/21 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
表单元素事件 (Form Element Events)
2009/07/17 Javascript
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
Javascript 高阶函数使用介绍
2015/06/15 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
Python进度条的制作代码实例
2019/08/31 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Python项目跨域问题解决方案
2020/06/22 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
针对吵架老公保证书
2015/05/08 职场文书
婚宴来宾致辞
2015/07/28 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
MySQL数据库简介与基本操作
2022/05/30 MySQL