国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現(xiàn)批量檢測HTTP服務(wù)的狀態(tài)

2020-02-23 01:41:17
字體:
供稿:網(wǎng)友

用Python實現(xiàn)批量測試一組url的可用性(可以包括HTTP狀態(tài)、響應(yīng)時間等)并統(tǒng)計出現(xiàn)不可用情況的次數(shù)和頻率等。

類似的,這樣的腳本可以判斷某個服務(wù)的可用性,以及在眾多的服務(wù)提供者中選擇最優(yōu)的。

需求以及腳本實現(xiàn)的功能如下:

    默認情況下,執(zhí)行腳本會檢測一組url的可用性。 如果可用,返回從腳本所在的機器到HTTP服務(wù)器所消耗的時間和內(nèi)容等信息。 如果url不可用,則記錄并提示用戶,并顯示不可用發(fā)生的時間。 默認情況下,允許最大的錯誤次數(shù)是200,數(shù)目可以自定義,如果達到允許的最大錯誤次數(shù),則在輸出信息的最后,根據(jù)每一個url做出錯誤統(tǒng)計。 如果用戶手動停止腳本,則需要在輸出信息的最后,根據(jù)每一個url做出錯誤統(tǒng)計。

腳本中涉及的一些技巧:

    使用gevent并發(fā)處理多個HTTP請求,多個請求之間無須等待響應(yīng)(gevent還有很多使用技巧,可再自行學習); 使用signal模塊捕獲信號,如果捕獲到則處理并退出,避免主進程接收到KeyboardInterrupt直接退出但無法處理的問題; 注意留意腳本中關(guān)于統(tǒng)計次數(shù)方面的小技巧;

腳本運行效果圖( 如果圖片看不清楚,請選擇“在新標簽頁中打開圖片” )如下:

腳本如下:

#!/usr/bin/python# encoding: utf-8# -*- coding: utf8 -*-"""Created by PyCharm.File:    LinuxBashShellScriptForOps:testNoHttpResponseException,testHttpHostAvailability.pyUser:    GuodongCreate Date:  2016/10/26Create Time:  12:09Function: test Http Host AvailabilitySome helpful message: For CentOS: yum -y install python-devel python-pip; pip install gevent For Ubuntu: apt-get -y install python-dev python-pip; pip install gevent For Windows: pip install gevent """import signalimport timeimport sys# execute some operations concurrently using pythonfrom gevent import monkeymonkey.patch_all()import geventimport urllib2hosts = ['https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck',   'https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck', ]errorStopCounts = 200quit_flag = Falsestatistics = dict()def changeQuit_flag(signum, frame): del signum, frame global quit_flag quit_flag = True print "Canceled task on their own by the user."def testNoHttpResponseException(url): tryFlag = True global quit_flag errorCounts = 0 tryCounts = 0 global statistics globalStartTime = time.time() while tryFlag:  if not quit_flag:   tryCounts += 1   print('GET: %s' % url)   try:    startTime = time.time()    resp = urllib2.urlopen(url) # using module 'request' will be better, request will return header info..    endTime = time.time()    data = resp.read()    responseTime = endTime - startTime    print '%d bytes received from %s. response time is: %s' % (len(data), url, responseTime)    print "data received from %s at %d try is: %s" % (url, tryCounts, data)    gevent.sleep(2)   except urllib2.HTTPError as e:    errorCounts += 1    statistics[url] = errorCounts    currentTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())    print "HTTPError occurred, %s, and this is %d times(total) occurs on %s at %s." % (     e, statistics[url], url, currentTime)    if errorCounts >= errorStopCounts:     globalEndTime = time.time()     tryFlag = False  else:   globalEndTime = time.time()   break for url in statistics:  print "Total error counts is %d on %s" % (statistics[url], url)  hosts.remove(url) for url in hosts:  print "Total error counts is 0 on %s" % url globalUsedTime = globalEndTime - globalStartTime print "Total time use is %s" % globalUsedTime sys.exit(0)try: # Even if the user cancelled the task, # it also can statistics the number of errors and the consumption of time for each host. signal.signal(signal.SIGINT, changeQuit_flag) gevent.joinall([gevent.spawn(testNoHttpResponseException, host) for host in hosts])except KeyboardInterrupt: # Note: this line can NOT be reached, because signal has been captured! print "Canceled task on their own by the user." sys.exit(0)            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌图县| 璧山县| 敦煌市| 封丘县| 平塘县| 铁力市| 广水市| 盖州市| 蒙城县| 炉霍县| 老河口市| 稷山县| 凌海市| 孙吴县| 农安县| 民和| 郓城县| 大冶市| 互助| 鸡东县| 西青区| 措勤县| 康平县| 洪江市| 淳化县| 根河市| 崇仁县| 普宁市| 文山县| 靖远县| 绥棱县| 博客| 贡觉县| 开江县| 贵溪市| 姚安县| 安阳市| 晋宁县| 台北县| 堆龙德庆县| 卢湾区|