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网络爬虫出现乱码问题的解决方法
Jan 05 Python
python输入错误密码用户锁定实现方法
Nov 27 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
使用python去除图片白色像素的实例
Dec 12 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
分析Python list操作为什么会错误
Nov 17 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php防止网站被刷新的方法汇总
2014/12/01 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
2018/10/16 PHP
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
vuex如何重置所有state(可定制)
2019/01/17 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
django中的数据库迁移的实现
2020/03/16 Python
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
家长给小学生的评语
2014/01/30 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
电工技术比武方案
2014/05/11 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
学术会议邀请函
2015/01/30 职场文书
学习经验交流会总结
2015/11/02 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript