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之list和str比较
Sep 20 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python爬虫之自制英汉字典
Jun 24 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
使用Pycharm分段执行代码
Apr 15 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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 Ajax乱码
2008/04/09 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
进一步了解Python中的XML 工具
2015/04/13 Python
python 编写简单网页服务器的实例
2018/06/01 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
Python Merge函数原理及用法解析
2020/09/16 Python
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
端午节演讲稿
2014/05/23 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
党员作风建设自查报告
2014/10/23 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
稽核岗位职责
2015/02/10 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书