python 多线程实现检测服务器在线情况
作者:hebedich 发布时间:2021-12-11 15:15:58
标签:python,多线程,检测服务器
需要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()
'''
效果如下:
平一个网段只要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 的多线程中,有时候我们会需要每一个线程中返回的结果。然而,在经过我的多番尝试、以及网上各种博
- MVC和MTV框架MVCWeb服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们
- 下面演示了,当asp程序发生错误时,屏蔽系统默认的错误显示,而显示自定义的错误信息。<%@ LANGUAGE="V
- 本文实例讲述了Python enumerate函数功能与用法。分享给大家供大家参考,具体如下:eunmerate在英文中是列举、枚举的意思,
- 处理上传的文件: f1 = request.FILES['pic'] fname = '%s/%s' % (
- ASP.NET利用它可以实现在线备份、还原数据库等各种功能。由于客户的数据库和WEB服务不再同一台服务器,把网站部署在服务器上以后,运行程序
- 换了N种字符串连接的方法,终于连接上去了。 共享下用的 Provider=SQLOLEDB.1; User ID=sa; Password=
- python现在的版本,主要是python2和python3两个大版本,这两个版本有很大的不同。当我们在自己电脑上同时安装了python2.
- 在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段
- 目录1.用途2.语法3.实操1.用途通常,如果发生错误,脚本就会立即停止,并在控制台将错误打印出来。有了这个语句就可以捕获错误并执行合理操作
- Python3中sort方法是列表类型list的内置方法,使用sort方法对list排序会修改list本身,不会返回新的list。sort方
- 保存时代码如下:figure_corp = figure.crop( (32*rate/2, 32*rate/2, 32-32*rate/2
- 今天有碰到这种情况,数据库中有张表没办法通过migration来更改, migrate时报 django.db.utils.Operatio
- 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字
- 有时候网站会收到一些投稿文章,或者也会转载别人的文章,新创建一个用户又有些麻烦,但在作者名称那里显示自己的名字,总不是那么和谐。今天倡萌推荐
- 当你连接一个MySQL服务器时,你通常应该使用一个口令。口令不以明文在连接上传输。所有其它信息作为能被任何人读懂的文本被传输。如果你担心这个
- PDO::lastInsertIdPDO::lastInsertId — 返回最后插入行的ID或序列值(PHP 5 >= 5.1.0,
- 由于GIL(Global Interpreter Lock)的存在使得在同一时刻Python进程只能使用CPU的一个核心,也就是对应操作系统
- 基本概念简单地说,Node.js是在服务器端运行的JavaScript。 节点。$ node> console.log('He