利用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,如需转载请自行联系原作者

相关文章
|
30天前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
1月前
|
JSON API 数据安全/隐私保护
【干货满满】分享微店API接口到手价,用python脚本实现
微店作为知名社交电商平台,其开放平台提供商品查询、订单管理等API接口。本文介绍如何通过微店API获取商品到手价(含优惠、券等),涵盖认证机制、Python实现及关键说明。
|
1月前
|
JSON API 数据格式
深度分析大麦网API接口,用Python脚本实现
大麦网为国内领先演出票务平台,提供演唱会、话剧、体育赛事等票务服务。本文基于抓包分析其非官方接口,并提供Python调用方案,涵盖演出列表查询、详情获取及城市列表获取。需注意非官方接口存在稳定性风险,使用时应遵守平台规则,控制请求频率,防范封禁与法律风险。适用于个人学习、演出信息监控等场景。
|
29天前
|
JSON API 开发者
深度分析阿里妈妈API接口,用Python脚本实现
阿里妈妈是阿里巴巴旗下营销平台,提供淘宝联盟、直通车等服务,支持推广位管理、商品查询等API功能。本文详解其API调用方法,重点实现商品推广信息(佣金、优惠券)获取,并提供Python实现方案。
|
28天前
|
API 数据安全/隐私保护 开发者
深度分析苏宁API接口,用Python脚本实现
深度分析苏宁API接口,用Python脚本实现
|
29天前
|
JSON API 数据安全/隐私保护
深度分析虾皮城API接口,用Python脚本实现
虾皮开放平台提供丰富的API接口,支持商品管理、订单处理及促销信息查询等功能。本文详解API认证机制与调用方法,基于Python实现商品价格及到手价获取方案,适用于电商数据分析与运营。
|
30天前
|
前端开发 Shell API
深度分析58同城API接口,用Python脚本实现
58同城为国内知名分类信息平台,涵盖房产、招聘、二手车等多领域。本文基于网页抓包与解析,分享其非官方接口的Python实现方案,分析核心接口特性与反爬应对策略,适用于数据学习与信息聚合。注意:非官方接口存在风险,使用需遵守平台规则。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
211 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
87 1

推荐镜像

更多