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

简介:

啥是pypy

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

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


反正是性能很好的东西,但是也有不少的局限性。


咱们就不用源码安装了,最新的版本是2.2.1,但是看老外那边用2.0的还是比较的多。 有需要的朋友可以下载2.2.1

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


104452744.jpg


简单的跑一下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import  time
#xiaorui.cc
#rfyiamcool@ 163 .com
def test(n,m):
     m=m
     vals = []
     keys = []
     for  in  xrange(m):
         vals.append(i)
         keys.append( 'a%s' %i)
     d = None
     for  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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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  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

结果打出来是这样的 ~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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也是存在兼容的 !  


1
2
3
4
5
6
7
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 :~





 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1343917,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
8 0
|
1天前
|
测试技术 API 开发者
使用 Playwright 脚本录制简化自动化测试:完全指南
Playwright提供了一种脚本录制功能,帮助开发者通过交互式操作自动生成测试脚本,提升测试效率。使用Playwright的命令行工具`codegen`,如`playwright codegen python &lt;url&gt;`,可以记录浏览器操作并生成Python测试脚本。生成的脚本使用Playwright API模拟用户交互,如`page.click()`和`page.fill()`。这种方法简化了自动化测试脚本的编写,促进了测试流程的加速。
6 1
|
1天前
|
IDE 测试技术 开发工具
从零开始:使用 Playwright 脚本录制实现自动化测试
Playwright提供了一种便捷的脚本录制功能,类似于Selenium IDE。通过运行`playwright codegen`命令,你可以启动一个浏览器并记录你的操作,生成Python或异步代码。在示例中,展示了如何录制登录百度的过程,生成的代码可以直接用于自动化测试。Playwright Inspector允许你编辑和转换测试代码,支持生成Pytest格式的测试用例,方便Python开发者使用。这个功能使Playwright成为强大的Web自动化测试工具。
8 3
|
1天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
4 0
|
1天前
|
监控 数据可视化 IDE
python自动化测试实战 —— 单元测试框架
python自动化测试实战 —— 单元测试框架
8 2
|
1天前
|
Web App开发 JavaScript 测试技术
python自动化测试实战 —— WebDriver API的使用
python自动化测试实战 —— WebDriver API的使用
6 1
|
1天前
|
Web App开发 测试技术 Python
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
6 0
|
1天前
|
测试技术 BI Python
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告
5 0
|
1天前
|
Java 测试技术 数据库连接
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— Python 的 unittest 框架
4 0
|
1天前
|
存储 网络协议 测试技术
【如何学习Python自动化测试】—— Cookie 处理
【如何学习Python自动化测试】—— Cookie 处理
7 1