博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学之路-python计算实战(2)-初遇pypy
阅读量:5925 次
发布时间:2019-06-19

本文共 1966 字,大约阅读时间需要 6 分钟。

PyPy是Python开发人员为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定详细的功能在不同情况的实现方法,能够非常easy实施。 该项目的目标是,让PyPy比C实现的Python更为easy的适应各个项目和方便裁剪。

PyPy的第一部分:用Python实现的Python

事实上这么说并不准确,准确得说应该是用rPython实现的Python。rPython是Python的一个子集,尽管rPython不是完整的Python,但用rPython写的这个Python实现却是能够解释完整的Python语言。

PyPy的第二部分:编译器

这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端。眼下也仅仅有这么一个前端。只是它的后端却是不少。也就是说这个编译器支持很多的目标语言,比較重要的有:C。CIL。Javascript ...

PyPy还提供了JIT编译器和沙盒功能。因此执行速度比CPython要快。以及能够安全的执行一些不被信任的代码。

PyPy另一个单独的支持微线程的版本号。这些都是python的弱项,pypy是神器

下面面程序为例:

import  time

start=time.clock()
sum=0
i=1.0
while (i<10000000):
    sum+=i/2.22
    i=i+1
print "sum:%f"%sum
end = time.clock()
print "seconds:%f"%sum

本博客全部内容是原创。假设转载请注明来源

执行上面程序

deep@myddb:~$ python pythontest.py

sum:22522520270270.273438
seconds:4.090000
deep@myddb:~$ ./pypy  pythontest.py
sum:22522520270270.273438
seconds:0.256000
deep@myddb:~$ 

效果非常不错,让人惊讶

上面程序用到下面函数:

time.
clock
(
)

On Unix, return the current processor time as a floating point number expressed in seconds. The precision, and in fact the very definition of the meaning of “processor time”, depends on that of the C function of the same name, but in any case, this is the function to use for benchmarking Python or timing algorithms.

Python的标准库手冊推荐在不论什么系统下都尽量使用time.clock()。

只是要注意是在win32系统下,这个函数返回的是真实时间(wall_time),而在Unix/Linux下返回的是CPU时间,不包含其它程序使用的CPU时间。

只是与C还是有差距的,可是已经非常不错的。相比cpython来说。

deep@myddb:~$ gcc pythontest.c -o test1

deep@myddb:~$ ./test1
sum = 22522520270270.273438
seconds = 0.080000  s
deep@myddb:~$ ./pypy  pythontest.py
sum:22522520270270.273438
seconds:0.236000
deep@myddb:~$ 

pythontest.c程序例如以下:

#include <TIME.H>

#include <STDIO.H>
int main(){
long Time_Start = 0,Time_End = 0;
double Time_Total = 0.0;
double i = 1.0;
double sum = 0.0;
Time_Start = clock();
while(i<10000000){
sum += (double)i/2.22;
i = i+1;
}
Time_End = clock();
Time_Total = (double)(Time_End-Time_Start)/CLOCKS_PER_SEC;
printf("sum = %f\n",sum);
printf("seconds = %f  s\n",Time_Total);
return 0;
}

你可能感兴趣的文章
【二叉树】二叉树的下一个节点
查看>>
如何制作一个基于Tile的游戏(2) Cocos2d-x 2.0.4
查看>>
[转载] New Concept English 1——Lesson 1 Excuse me!
查看>>
电脑公司特供版 GHOST XP SP3 纯净版 Ver1105
查看>>
我的友情链接
查看>>
Java多线程-线程的同步(同步代码块)
查看>>
Docker expose all ports or range of ports from 7000 to 8000
查看>>
ceph 简单测试
查看>>
2017 年移动应用开发十大趋势
查看>>
用美化包设置Java Swing LookAndFeel
查看>>
各硬盘编号含义
查看>>
Git分布式版本工具的部署与使用
查看>>
第1章 Java 多线程技能
查看>>
test_app.sh
查看>>
php持续集成——在Centos+Jenkins+Ant+PHPUnit跑通了单元测试
查看>>
打包安装android应用报错:如下
查看>>
网站排名下降的原因,网站排名下降怎么办?
查看>>
PDF文件怎么修改,怎样替换PDF中的一页
查看>>
Infortrend亮相2019年台北国际电脑展,横向扩展NAS集群、云存储、AI一体机集体登场...
查看>>
三次握手、四次挥手
查看>>