利用pypy提升python脚本的执行速度及测试性能

啥是pypyhtml

简单地说, PyPy 是用 Python 语言写了一个工具, 将 Python 代码成 C, .NET, Java 等语言和平台的代码. PHP 也有相似的项目 – HipHop-PHP, 把 PHP 代码转成 C++ 代码.python

为何要将一种语言转成另外一种语言? 首先是目标语言可能在性能(如C语言)和/或跨平台(如 .NET, Java)等方面具备优点. 其次, 在转换的过程, 能够进行代码优化或加入新技术, 好比 PyPy 应用的 Just-in-Time(JIT) 技术, 能让 Python (事实上是转换后的目标代码)的执行速度更快.flask


反正是性能很好的东西,可是也有很多的局限性。服务器


我们就不用源码安装了,最新的版本是2.2.1,可是看老外那边用2.0的仍是比较的多。 有须要的朋友能够下载2.2.1app

地址:http://pypy.org/download.htmlsocket


104452744.jpg


简单的跑一下:ide


import time
#xiaorui.cc
#rfyiamcool@163.com
def test(n,m):
    m=m
    vals = []
    keys = []
    for i in xrange(m):
        vals.append(i)
        keys.append('a%s'%i)
    d = None
    for i in xrange(n):
        d = dict(zip(keys, vals))
    return d
if __name__ == '__main__':
    st = time.time()
    print test(1000000,100)
    print 'use:', time.time() - st


看看pypy和纯python执行的效率比较 !工具

发现一个小规律,在小数据的时候,貌似pypy比率很大,可是运算多了后,貌似结果差距不算大。 性能

111647847.jpg

这是用纯python执行的结果。测试

111741475.jpg


import time
from time import clock
#xiaorui.cc
def check(num):
    a = list(str(num))
    b = a[::-1]
    if a == b:
        return True
    return False
                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                      
def main():
    all = range(1,10**7)
    for i in all:
        if check(i):
            if check(i**2):
                print(i,i**2)
                                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                      
if __name__ == '__main__':
    start = clock()
    main()
    end = clock()
    print (end-start)


112502665.jpg

结果打出来是这样的 ~

root@YZSJHL1-131:~$python g2.py
(1, 1)
(2, 4)
(3, 9)
(11, 121)
(22, 484)
(101, 10201)
(111, 12321)
(121, 14641)
(202, 40804)
(212, 44944)
(1001, 1002001)
(1111, 1234321)
(2002, 4008004)
(10001, 100020001)
(10101, 102030201)
(10201, 104060401)
(11011, 121242121)
(11111, 123454321)
(11211, 125686521)
(20002, 400080004)
(20102, 404090404)
(100001, 10000200001)
(101101, 10221412201)
(110011, 12102420121)
(111111, 12345654321)
(200002, 40000800004)
(1000001, 1000002000001)
(1001001, 1002003002001)
(1002001, 1004006004001)
(1010101, 1020304030201)
(1011101, 1022325232201)
(1012101, 1024348434201)
(1100011, 1210024200121)
(1101011, 1212225222121)
(1102011, 1214428244121)
(1110111, 1232346432321)
(1111111, 1234567654321)
(2000002, 4000008000004)
(2001002, 4004009004004)


不知道是否是服务器的性能不够高,找了台所谓高性能的服务器再跑跑: (公司刚买了一堆的华为服务器,挺好奇的,华为竟然也出服务器了,找了台没上线的服务器测试下)

我晕,真垃圾的呀 !   看来这个机型适合作杂七杂八的业务的机型 !  

python的由于是单核跑的,因此和cpu的主频有关联的 !

114342262.png


有老外说 gevent和pypy能够更好的提升效率,在pypy层次下也能够调用协程。等有结果在分享给你们!

pypy对我来讲,最大的缺点就是他的库支持的仍是少,尤为是socket级别的包,很多的bug。  就算是最普遍的Django也是存在兼容的 !  


root@YZSJHL1-131:~$pypy myapp.py
Traceback (most recent call last):
  File "app_main.py", line 72, in run_toplevel
  File "myapp.py", line 2, in <module>
    from flask import Flask
ImportError: No module named flask
root@YZSJHL1-131:~$



好,先说到这里 !

相关文章
相关标签/搜索