pypy提升python项目性能使用详解
目录
- 一、PyPy介绍
- 二、PyPy安装
- 三、PyPy和Python测试对比
- 四、PyPy注意事项
一、PyPy介绍
PyPy是用Python实现的Python解释器的动态编译器,是Armin Rigo开发的产品,能够提升我们python项目的运行速度。PyPy 是利用即时编译的 Python 的替代实现。
背后的原理是 PyPy 开始时就像一个解释器,直接从源文件运行我们的 Python 代码。但是,PyPy 不是逐行运行代码,而是在执行它们之前将部分代码编译为机器代码。
根据官方文档的介绍可以看到,平均下来PyPy比CPython(也就是我们主流使用的python)快4.5倍:
PyPy除了速度快外,还有下面一些特点:
- 内存使用情况比cpython少
- gc策略更优化
- Stackless 协程模式默认支持,支持高并发
- 兼容性好,高度兼容cpython实现,基本可以无缝切换
- PyPy为许多平台和操作系统提供预编译的二进制文件:
二、PyPy安装
我们直接访问下载地址:www.pypy.org/download.ht… 下载对应的包使用即可。
下载完成后解压到任意目录然后加入到环境变量中:
然后在控制台中执行pypy
就可以开始使用它了:
三、PyPy和Python测试对比
我们可以通过一个简单的脚本来测试一下它们之间的性能差异,下面是一个循环3千万次的累乘计算:
import datetime x = 0 start_time = datetime.datetime.now() for i in range(30000000): x += i * i print('耗时:', datetime.datetime.now() - start_time)
测试结果
python耗时: 0:00:03.357052
pypy耗时: 0:00:00.761932
可以看到有近4.5倍的性能差距,这也符合PyPy官网介绍的。
四、PyPy注意事项
经过测试PyPy也有一些库是不支持的:
- pyinstrument
- sshtunnel
这只是我经常使用的一些库中发现不支持的库,但绝大部分的库都是支持的,比如Django、requests、pymysql
等。
另外,对于诸如numpy
、pandas
这类本身就是C语言开发的扩展时,PyPy的性能反而会更低,PyPy只对纯Python库有明显的性能提升。
最后在你决定要使用PyPy时,你应该思考你的项目是否有性能瓶颈,或者性能瓶颈是因为Python本身效率慢的问题。如果是后端接口项目(类似使用flask、django开发的后端)其性能瓶颈往往在SQL的执行和代码本身的逻辑问题上,而不是python执行慢导致的。所以即便你使用了PyPy也大概率不能解决你的性能问题。
以上就是pypy提升python项目性能使用详解的详细内容,更多关于python pypy项目性能提升的资料请关注我们其它相关文章!
相关推荐
-
聊聊Python中的pypy
PyPy是一个虚拟机项目,主要分为两部分:一个Python的实现和 一个编译器 PyPy的第一部分: 用Python实现的Python 其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言. PyPy的第二部分:编译器 这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,
-
如何用PyPy让你的Python代码运行得更快
Python是开发人员中最常用的编程语言之一,但它有一定的局限性.例如,对于某些应用程序而言,它的运行速度可能比其它语言低100倍.这就是为什么当Python的运行速度成为用户瓶颈后,许多公司会用另一种语言重写他们的应用程序.但是有没有一种方法既可以保持Python的特性又能提高速度呢?它就是PyPy. PyPy是一种非常兼容的Python解释器,它是CPython2.7.3.6和即将推出的3.7的一种值得替代的方法.在安装和运行应用程序时使用它,可以显著提高速度.速度提高多少取决于你运行的应用
-
对Python通过pypyodbc访问Access数据库的方法详解
看书上通过ODBC访问数据库的案例,想实践一下在Python 3.6.1中实现access2003数据库的链接,但是在导入odbc模块的时候出现了问题,后来查了一些资料就尝试着使用pypyodbc,最后成功了. 操作步骤: ①安装pypyodbc 目前Python安装通常使用steup.py或者pip工具,在python3.4之后的的版本都默认包含了pip,因此,这里推荐使用pip工具.在cmd中执行:pip install pypyodbc,耐心等待执行完成,pypyodbc模块就已经安装成功
-
PyPy 如何让Python代码运行得和C一样快
目录 1. 引言 2. 举个栗子 3. 刨根问底 3.1 提前编译 3.2 语言可解释性 3.3 即时编译 4. 总结 1. 引言 作为一名算法工程师,如何快速实现一个想法并验证它是否有效对日常工作至关重要.Python 是一个出色的工具,可以很方便地实现这一点.它允许我们专注于想法本身,而不会被繁杂的代码实现所困扰. 然而,小伙伴们一定都听说过,Python脚本语言有一个致命缺点:相比比 C 或 C++ 等编译语言Python运行慢得多.那么,在我们通过构建 Python 快速实现了一个想法之
-
pypy提升python项目性能使用详解
目录 一.PyPy介绍 二.PyPy安装 三.PyPy和Python测试对比 四.PyPy注意事项 一.PyPy介绍 PyPy是用Python实现的Python解释器的动态编译器,是Armin Rigo开发的产品,能够提升我们python项目的运行速度.PyPy 是利用即时编译的 Python 的替代实现. 背后的原理是 PyPy 开始时就像一个解释器,直接从源文件运行我们的 Python 代码.但是,PyPy 不是逐行运行代码,而是在执行它们之前将部分代码编译为机器代码. 根据官方文档的介绍可
-
Docker如何部署Python项目的实现详解
Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如何 docker 化一个 Python Django 应用程序,然后使用一个 docker-compose 脚本将应用程序作为容器部署到 docker 环境. 环境 操作系统 dbnuo@localhost ~ sw_vers ProductName: Mac OS X ProductVersion
-
Python即时网络爬虫项目启动说明详解
作为酷爱编程的老程序员,实在按耐不下这个冲动,Python真的是太火了,不断撩拨我的心. 我是对Python存有戒备之心的,想当年我基于Drupal做的系统,使用php语言,当语言升级了,推翻了老版本很多东西,不得不花费很多时间和精力去移植和升级,至今还有一些隐藏在某处的代码埋着雷.我估计Python也避免不了这个问题(其实这种声音已经不少,比如Python 3 正在毁灭 Python). 但是,我还是启动了这个Python即时网络爬虫项目.我用C++.Java和Javascript编写爬虫相关
-
python多线程超详细详解
python中的多线程是一个非常重要的知识点,今天为大家对多线程进行详细的说明,代码中的注释有多线程的知识点还有测试用的实例. import threading from threading import Lock,Thread import time,os ''' python多线程详解 什么是线程? 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位. 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程
-
基于python图书馆管理系统设计实例详解
写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担了所有,肝了一周多,终于完成,但这个也算是一个很大的项目了吧,对于我现在来说,写这个项目遇到了很多困难,这是真的,其中涉及到数据库的使用,就遇到了一点瓶颈, 但这不算什么,还是要被我搞定的. 梦想就像这个远处夕阳,终究触手可及! Python项目: 项目前提: 这个项目涉及到的知识点有很多, 知识串
-
Python MNIST手写体识别详解与试练
[人工智能项目]MNIST手写体识别实验及分析 1.实验内容简述 1.1 实验环境 本实验采用的软硬件实验环境如表所示: 在Windows操作系统下,采用基于Tensorflow的Keras的深度学习框架,对MNIST进行训练和测试. 采用keras的深度学习框架,keras是一个专为简单的神经网络组装而设计的Python库,具有大量预先包装的网络类型,包括二维和三维风格的卷积网络.短期和长期的网络以及更广泛的一般网络.使用keras构建网络是直接的,keras在其Api设计中使用的语义是面向层
-
使用Python进行数独求解详解(二)
目录 1.引言 2.前文回顾 3.减少非比要的迭代次数 3.1生成候选值字典 3.2生成候选值列表 3.3函数调用 4.总结 1. 引言 本文是数独游戏问题求解的第二篇,在前文中我们使用回溯算法实现了最简单版本的数独游戏求解方案.本文主要在前文解决方案的基础上,来思考如何通过改进来提升数独问题求解算法的性能. 闲话少说,我们直接开始吧. :) 2. 前文回顾 我们首先来回顾下前文的回溯算法,如下图示: 在前文中,我们引入了回溯算法来对数独问题求解,通过迭代每个子单元格cell的所有可能取值来暴力
-
Python folium的实用功能详解
目录 前言 一.效果图 二.图层控制 三.指北针 四.folium添加js和css 五.经纬网格线 1.html页面实现经纬度网格 2.自定义网格线的类 3.实现网格线 前言 本博客重点:folium的使用功能,图层控制.指北针.folium添加js和css.经纬网格线(栅格线) 在上一篇使用folium制作地图的博客中,我们介绍了folium制作一张地图和基本使用,然而在使用中我们还需要一些额外的标识提升我们图片的质量,folium提供了更清晰的方法和插件,虽然官方插件很全,但是有时我们也需
-
python 编程之twisted详解及简单实例
python 编程之twisted详解 前言: 我不擅长写socket代码.一是用c写起来比较麻烦,二是自己平时也没有这方面的需求.等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方.最近由于项目的原因需要写一些Python代码,才发现在python下面开发socket是一件多么爽的事情. 对于大多数socket来说,用户其实只要关注三个事件就可以了.这分别是创建.删除.和收发数据.python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦.下面的代码来自t
-
Python的语言类型(详解)
Python 是强类型的动态脚本语言 . 强类型:不允许不同类型相加 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译 强类型语言和弱类型语言 1.强类型语言:使之强制数据类型定义的语言.没有强制类型转化前,不允许两种不同类型的变量相互操作.强类型定义语言是类型安全的语言,如Java.C# 和 python,比如Java中"int i = 0.0;"是无法通过编译的: 2.弱类型语言:数据类型
随机推荐
- MyEclipse删除网上复制下来的来代码带有的行号(正则去除行号)
- 基于oracle小数点前零丢失的问题分析
- ajaxToolkit:CalendarExtender演示与实现代码
- symfony2.4的twig中date用法分析
- android自定义控件和自定义回调函数步骤示例
- C#值类型和引用类型的深入理解
- 简单讲解Python中的闭包
- 浅谈Go语言的空标示符
- ASP操作数据库的类
- C++中指针的数据类型和运算相关知识小结
- Docker 教程之镜像列出详细介绍
- shell脚本实现分日志级别输出的方法
- jquery实现的美女拼图游戏实例
- Android getViewById和getLayoutInflater().inflate()的详解及比较
- jquery focus(fn),blur(fn)方法实例代码
- JavaScript实现的伸展收缩型菜单代码
- pthread_cond_wait() 用法深入分析
- bmp 缩放代码(BMP位图任意放大 和缩小)
- Java中的关键字_动力节点Java学院整理
- 漂亮但不安全的CTB