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 paramiko实现ssh远程访问的方法
Dec 03 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Python PO设计模式的具体使用
Aug 16 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 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
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python 自动补全(vim)
2014/11/30 Python
python处理大数字的方法
2015/05/27 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
浅谈Python中函数的参数传递
2016/06/21 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
PyQt5多线程防卡死和多窗口用法的实现
2020/09/15 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
租房协议书
2014/09/12 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
优秀党员个人总结
2015/02/14 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏