欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用Python的Treq on Twisted來進行HTTP壓力測試

系統 1882 0

從事API相關的工作很有挑戰性,在高峰期保持系統的穩定及健壯性就是其中之一,這也是我們在Mailgun做很多壓力測試的原因。

這么久以來,我們已經嘗試了很多種方法,從簡單的ApacheBench到復雜些的自定義測試套。但是本貼講述的,是一種使用python進行“快速粗糙”卻非常靈活的壓力測試的方法。
使用python寫HTTP客戶端的時候,我們都很喜歡用 Requests library。這也是我們向我們的API用戶們推薦的。Requests 很強大,但有一個缺點,它是一個模塊化的每線程一個調用的東西,很難或者說不可能用它來快速的產生成千上萬級別的請求。
Treq on Twisted簡介

為解決這個問題我們引入了Treq (Github庫)。Treq是一個HTTP客戶端庫,受Requests影響,但是它運行在Twisted上,具有Twisted典型的強大能力:處理網絡I/O時它是異步且高度并發的方式。

Treq并不僅僅限于壓力測試:它是寫高并發HTTP客戶端的好工具,比如網頁抓取。Treq很優雅、易于使用且強大。這是一個例子:

            
 >>> from treq import get
  
 >>> def done(response):
 ...   print response.code
 ...   reactor.stop()
  
 >>> get("http://www.github.com").addCallback(done)
  
 >>> from twisted.internet import reactor
 200

          

簡單的測試腳本
如下是一個使用Treq的簡單腳本,用最大可能量的請求來對單一URL進行轟炸。

            
 #!/usr/bin/env python
 from twisted.internet import epollreactor
 epollreactor.install()
  
 from twisted.internet import reactor, task
 from twisted.web.client import HTTPConnectionPool
 import treq
 import random
 from datetime import datetime
  
 req_generated = 0
 req_made = 0
 req_done = 0
  
 cooperator = task.Cooperator()
  
 pool = HTTPConnectionPool(reactor)
  
 def counter():
   '''This function gets called once a second and prints the progress at one
   second intervals.
   '''
   print("Requests: {} generated; {} made; {} done".format(
       req_generated, req_made, req_done))
   # reset the counters and reschedule ourselves
   req_generated = req_made = req_done = 0
   reactor.callLater(1, counter)
  
 def body_received(body):
   global req_done
   req_done += 1
  
 def request_done(response):
   global req_made
   deferred = treq.json_content(response)
   req_made += 1
   deferred.addCallback(body_received)
   deferred.addErrback(lambda x: None) # ignore errors
   return deferred
  
 def request():
   deferred = treq.post('http://api.host/v2/loadtest/messages',
              auth=('api', 'api-key'),
              data={'from': 'Loadtest 
            
              ',
                 'to': 'to@example.org',
                'subject': "test"},
             pool=pool)
   deferred.addCallback(request_done)
   return deferred
  
 def requests_generator():
   global req_generated
   while True:
     deferred = request()
     req_generated += 1
     # do not yield deferred here so cooperator won't pause until
     # response is received
     yield None
  
 if __name__ == '__main__':
   # make cooperator work on spawning requests
   cooperator.cooperate(requests_generator())
  
   # run the counter that will be reporting sending speed once a second
   reactor.callLater(1, counter)
  
   # run the reactor
   reactor.run()

            
          

輸出結果:

            
 2013-04-25 09:30 Requests: 327 generated; 153 sent; 153 received
 2013-04-25 09:30 Requests: 306 generated; 156 sent; 156 received
 2013-04-25 09:30 Requests: 318 generated; 184 sent; 154 received

          

“Generated”類的數字代表被Twisted反應器準備好但是還沒有發送的請求。這個腳本為了簡潔性忽略了所有錯誤處理。為它添加超時狀態的信息就留給讀者作為一個練習。

這個腳本可以當做是一個起始點,你可以通過拓展改進它來自定義特定應用下的處理邏輯。建議你在改進的時候用collections.Counter 來替代丑陋的全局變量。這個腳本運行在單線程上,想通過一臺機器壓榨出最大量的請求的話,你可以用類似 mulitprocessing 的技術手段。

愿你樂在壓力測試!


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天操夜夜爱 | 亚洲网站在线免费观看 | 无码无遮挡成人A片 | 国产人人澡 | 日韩精品一区二区免费视频 | 成人国产欧美精品一区二区 | 国产女人久久精品 | 激情视频在线观看网站 | 日韩在线精品视频 | 一级毛片在线观看视频 | 欧美一级电影网 | www.aiqingdao | 天天色天天射天天操 | 亚洲黄色激情 | 午夜在线观看免费视频 | 亚洲视频在线看 | 久久视频这里只要精品 | 国产无线乱码一区二三区 | 2022国产成人福利精品视频 | 拍拍拍无挡免费视频网站 | 午夜在线亚洲男人午在线 | 亚洲国产天堂久久精品网 | 国产2区| 黄色国产在线视频 | 日韩精品一区二区在线 | 国产色在线 | 日日操视频 | 亚洲精品自产拍在线观看app | 国产精品成人一区二区三区 | 一区二区三区免费视频观看 | 女人一级毛片免费视频观看 | 日韩精品视频免费在线观看 | 日本无码免费久久久精品 | 亚洲精品免费在线观看 | 九九精品久久久久久噜噜 | 在线一区观看 | 素人视频在线观看免费 | 国产精品乱码人人做人人爱 | 男生插女生视频免费 | 欧美成人二区 | 亚洲欧美日韩一区二区在线观看 |