最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年10月27日 08:42:34   作者:dgd2010  
本文給大家分享的是一個使用python實現(xiàn)的批量檢測web服務(wù)可用性的腳本代碼,主要功能有測試一組url的可用性(可以包括HTTP狀態(tài)、響應(yīng)時間等)并統(tǒng)計出現(xiàn)不可用情況的次數(shù)和頻率等。

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

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

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

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

腳本中涉及的一些技巧:

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

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

腳本如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
"""
Created by PyCharm.
File:    LinuxBashShellScriptForOps:testNoHttpResponseException,testHttpHostAvailability.py
User:    Guodong
Create Date:  2016/10/26
Create Time:  12:09

Function:
 test Http Host Availability

Some 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 signal
import time
import sys
# execute some operations concurrently using python
from gevent import monkey

monkey.patch_all()
import gevent
import urllib2

hosts = ['https://webpush.wx2.qq.com/cgi-bin/mmwebwx-bin/synccheck',
   'https://webpush.wx.qq.com/cgi-bin/mmwebwx-bin/synccheck', ]

errorStopCounts = 200

quit_flag = False
statistics = 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)

相關(guān)文章

  • python爬蟲之快速對js內(nèi)容進行破解

    python爬蟲之快速對js內(nèi)容進行破解

    這篇文章主要介紹了python爬蟲之快速對js內(nèi)容進行破解,到一般js破解有兩種方法,一種是用Python重寫js邏輯,一種是利用第三方庫來調(diào)用js內(nèi)容獲取結(jié)果,這次我們就用第三方庫來進行js破解,需要的朋友可以參考下
    2019-07-07
  • 使用Python將圖片轉(zhuǎn)正方形的兩種方法實例代碼詳解

    使用Python將圖片轉(zhuǎn)正方形的兩種方法實例代碼詳解

    這篇文章主要介紹了使用Python將圖片轉(zhuǎn)正方形的兩種方法,本文通過實例代碼給大家給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • plt.title()中文無法顯示的問題解決

    plt.title()中文無法顯示的問題解決

    本文主要介紹了plt.title()中文無法顯示的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 利用Python寫了一個水果忍者小游戲

    利用Python寫了一個水果忍者小游戲

    這篇文章主要介紹了利用Python寫了一個水果忍者小游戲,
    2022-05-05
  • Python模塊介紹與使用詳細講解

    Python模塊介紹與使用詳細講解

    這篇文章主要介紹了Python模塊介紹與使用詳細講解,包括模塊的相關(guān)概念和使用方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python中獲取當前線程名字的方法及多線程編程實踐記錄

    Python中獲取當前線程名字的方法及多線程編程實踐記錄

    本文介紹了在Python中獲取當前線程的名字的方法,并探討了其在多線程編程中的重要性和實際應(yīng)用,通過兩個實際的代碼示例,展示了如何利用多線程來并行計算斐波那契數(shù)列和下載文件,以提高程序的性能和效率,感興趣的朋友一起看看吧
    2024-04-04
  • Python中find()的用法小結(jié)

    Python中find()的用法小結(jié)

    Python中find()函數(shù)用于在字符串中查找目標字符或子字符串,并返回索引,本文就來介紹一下Python中find()的用法,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • python中@property的作用和getter setter的解釋

    python中@property的作用和getter setter的解釋

    這篇文章主要介紹了python中@property的作用和getter setter的解釋,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Anaconda安裝之后Spyder打不開解決辦法(親測有效!)

    Anaconda安裝之后Spyder打不開解決辦法(親測有效!)

    這篇文章主要給大家介紹了關(guān)于Anaconda安裝之后Spyder打不開解決辦法,文中將解決的過程介紹的非常詳細,親測有效,對同樣遇到這個問題的朋友具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • Python處理Excel文件實例代碼

    Python處理Excel文件實例代碼

    本篇文章主要介紹了Python處理Excel文件實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

岑巩县| 新余市| 武义县| 平陆县| 玛多县| 鞍山市| 伊川县| 邓州市| 蓝山县| 胶南市| 蕲春县| 赤水市| 梓潼县| 沂水县| 上虞市| 彰化市| 龙山县| 应城市| 孟州市| 晋江市| 石柱| 新晃| 新密市| 获嘉县| 涟水县| 靖边县| 朝阳县| 平远县| 台南县| 唐海县| 响水县| 江孜县| 抚顺县| 镇雄县| 申扎县| 壶关县| 马鞍山市| 芦山县| 鄂托克旗| 景德镇市| 香格里拉县|