qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          用python做測試實現高性能測試工具(1)—序

           做過幾年開發或者測試開發的人員,時常會覺得很迷茫,新功能的開發或者老功能的維護,基本是在堆代碼了, 做過幾年測試的朋友也會有類似的想法。性能調優或者性能測試的確很考驗人分析問題、解決問題的能力,知識是否全面。本人也是第一次實現高性能的測試工具, 記錄下這次diameter協議測試工具的優化過程,供大家一起學習。 有些內容涉及到具體產品,做了些改動或者單獨寫了測試代碼演示。
            Python用來開發高性能的測試工具的確有天然的缺陷,性能差還有GIL,無法利用多線程。 但辦法總比困難多,那么多大的互聯網公司都使用python與實際產品中,總比我們測試的性能要求搞多了。 本文主要講述在系統設計和架構方面的性能優化,具體算法和一些小細節的優化,請參考 http://blog.csdn.net/powerccna/article/details/8020289
            項目背景:
            實現個高性能的diameter 測試工具, 接受1000+發送1000,雙向要支持到2000條消息每秒。 diameter 協議的源代碼是從這里下載的 http://sourceforge.net/projects/pyprotosim/, 這個開源包還支持SMPP, RADIUS, DHCP, LDAP,  而且新增加的協議字段都可以在dictionary配置屬性,不需要修改代碼,實在是方便。 初始階段我們為了實現功能,沒有怎么考慮性能的問題,很多地方用的是單線程,初始性能只能支持到50 消息。硬件環境: SunFire 4170, 16 核,每核2.4 G
            Python性能優化的幾個方向:
            1. 換python的解析器:常見的python解析器有pysco,pypy, cython, jython, pysco已經對python 2.7不支持了,就沒有測試,據說跑的很C語言一樣快。對pypy, jython做了簡單測試,pypy在不同機器上可以提高到5-10倍的樣子,Jython雖然可以避免python GIL的問題(因為jython是跑在java虛擬機上的),但測試看來,效率提升很少。
            2. 優化代碼
            3. 改變系統架構,多線程,多進程或者協程
            方案1:  換Python解析器
            如果換Python解析器能達到性能需求是最廉價的方案了,不需要對代碼做任何改動。下面代碼只是為了說明pypy的效果,單獨寫的測試代碼,在windows下運行的結果。在linux下機器上運行效果會更好些。
          #!/usr/bin/env python
          #coding=utf-8
          import  time
          def check(num):
          a = list(str(num))
          b = a[::-1]
          if a == b:
          return True
          return False
          def test():
          all = xrange(1,10**7)
          for i in all:
          if check(i):
          if check(i**2):
          i**2
          if __name__ == '__main__':
          start=time.time()
          test()
          print time.time()-start
          分別用python和pypy的運行結果
          C:\Python27\python.exeD:/RCC/mp/src/test.py
          14.4940001965
          C:\pypy-2.1\pypy.exeD:/RCC/mp/src/test.py
          4.37800002098
            可以看出來pypy的運行結果效果還是明顯的,雖然能提高5倍(linux機器上),50*5, 離2000還差好遠。 pypy對python 多線程的支持沒有明顯效果,這個在后面會提到。
            先告一段落,太長了大家看起來累,下一篇文章中將會介紹代碼優化部分。

          posted on 2014-01-02 09:18 順其自然EVO 閱讀(439) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 上犹县| 贵州省| 湖北省| 五大连池市| 许昌市| 大方县| 巢湖市| 陆良县| 常德市| 瑞丽市| 庐江县| 铜川市| 海伦市| 锡林郭勒盟| 伊吾县| 通山县| 桂林市| 恩施市| 竹北市| 越西县| 渭源县| 万全县| 卢龙县| 江安县| 靖边县| 通渭县| 克什克腾旗| 安图县| 尚义县| 仁化县| 巴林左旗| 台湾省| 邛崃市| 兴安盟| 兴化市| 汉阴县| 汝南县| 青浦区| 苍山县| 琼结县| 抚顺县|