用python实现高性能测试工具(一)


本文摘自php中文网,作者little bottle,侵删。

做过几年开发或者测试开发的人员,时常会觉得很迷茫,新功能的开发或者老功能的维护,基本是在堆代码了。本文主要讲述在系统设计和架构方面的性能优化供大家学习, 有些内容涉及到具体产品,做了些改动或者单独写了测试代码演示。

项目背景:

实现个高性能的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下机器上运行效果会更好些。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#!/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 多线程的支持没有明显效果,这个在后面会提到。

先告一段落,太长了大家看起来累,下一篇文章中将会介绍代码优化部分。

【推荐课程:Python视频教程】

以上就是用python实现高性能测试工具(一)的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python之反转序列详解

Python视频爬虫实现下载头条视频

Python中tornado安全cookie机制的讲解

Python编程ide是什么

Python中re模块与正则表达式的介绍(附代码)

Python实现有序字典方法示例

简介Python的sklearn机器学习算法

Python中while循环的使用方法

Python的pip工具命令有哪些

Python中encoding是什么意思

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...