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语言编写电脑时间自动同步小工具
Mar 08 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
Python yield 使用方法浅析
May 20 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
详解django2中关于时间处理策略
Mar 06 Python
Python常见的pandas用法demo示例
Mar 16 Python
详解pandas的外部数据导入与常用方法
May 01 Python
python os.fork() 循环输出方法
Aug 08 Python
Pytorch之Variable的用法
Dec 31 Python
PyCharm最新激活码PyCharm2020.2.3有效
Nov 18 Python
python 实现一个简单的线性回归案例
Dec 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
php中计算时间差的几种方法
2009/12/31 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php版阿里云OSS图片上传类详解
2016/12/01 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
从sohu弄下来的flash中展示图片的代码
2007/04/27 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
Django配置跨域并开发测试接口
2020/11/04 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
实习生自荐信范文
2013/11/13 职场文书
洗手间标语
2014/06/23 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript