热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

啥是pypy简单地说,PyPy是用Python语言写了一个工具,将Python代码成C,.NET,Java等语言和平台的代码.PHP也有类似的项目�CHipH

啥是pypy

简单地说, PyPy 是用 Python 语言写了一个工具, 将 Python 代码成 C, .NET, Java 等语言和平台的代码. PHP 也有类似的项目 C 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


简单的跑一下:


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 timefrom time import clock#xiaorui.ccdef 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.pyTraceback (most recent call last):  File "app_main.py", line 72, in run_toplevel  File "myapp.py", line 2, in     from flask import FlaskImportError: No module named flaskroot@YZSJHL1-131:~$



好,先说到这里 !


本文出自 “峰云,就她了。” 博客,谢绝转载!


推荐阅读
  • Java 中 Writer flush()方法,示例 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
author-avatar
mobiledu2502862777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有