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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
Python中的lstrip()方法使用简介
May 19 Python
Python selenium 三种等待方式解读
Sep 15 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
python中返回矩阵的行列方法
Apr 04 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python3匿名函数用法示例
Jul 25 Python
解决python tkinter界面卡死的问题
Jul 17 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python实现PDF中表格转化为Excel的方法
Jun 16 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导入excel文件到mysql数据库的方法
2015/01/14 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
php实现文件预览功能
2017/05/23 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
jquery+json 通用三级联动下拉列表
2010/04/19 Javascript
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
javascript实现yield的方法
2013/11/06 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
详解python中requirements.txt的一切
2017/03/03 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
文明教师事迹材料
2014/01/16 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
中学生运动会口号
2014/06/07 职场文书
中职三好学生事迹材料
2014/08/24 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
简历上的自我评价,该怎么写呢?
2019/06/13 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
python实现股票历史数据可视化分析案例
2021/06/10 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android