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 正则表达式操作指南
May 04 Python
python实用代码片段收集贴
Jun 03 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
在Pycharm中设置默认自动换行的方法
Jan 16 Python
python 实现敏感词过滤的方法
Jan 21 Python
python实现的自动发送消息功能详解
Aug 15 Python
python 实现按对象传值
Dec 26 Python
python实现高斯投影正反算方式
Jan 17 Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
Python中Permission denied的解决方案
Apr 02 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中webservice实现的简单架构方法及实例
2015/02/03 PHP
PHP session 会话处理函数
2016/06/06 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
表格 隔行换色升级版
2009/11/07 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
win与linux系统中python requests 安装
2016/12/04 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
利用PyQt中的QThread类实现多线程
2020/02/18 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
运行Python编写的程序方法实例
2020/10/21 Python
python xlsxwriter模块的使用
2020/12/24 Python
企业负责人任命书
2014/06/05 职场文书
学校运动会报道稿
2014/09/23 职场文书
青年文明号汇报材料
2014/12/23 职场文书
紧急迫降观后感
2015/06/15 职场文书
绿里奇迹观后感
2015/06/15 职场文书
高二语文教学反思
2016/02/16 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python