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运算π的值深入Python中科学计算的实现
Apr 17 Python
基于python 字符编码的理解
Sep 02 Python
对pandas中to_dict的用法详解
Jun 05 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
python 批量压缩图片的脚本
Jun 02 Python
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
Jun 08 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
深入密码加salt原理的分析
2013/06/06 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
PHP用户注册邮件激活账户的实现代码
2017/05/31 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[01:24:51]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第二场
2014/05/26 DOTA
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
numpy自动生成数组详解
2017/12/15 Python
Python实现识别手写数字大纲
2018/01/29 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
文职个人求职信范文
2013/09/23 职场文书
采购主管岗位职责
2014/02/01 职场文书
勤俭节约倡议书
2014/04/14 职场文书
2014年法务工作总结
2014/12/11 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
python入门之算法学习
2021/04/22 Python
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS
vue实现移动端div拖动效果
2022/03/03 Vue.js