使用pypy来提升你的python项目性能

简介: 使用pypy来提升你的python项目性能

一、PyPy介绍

PyPy是用Python实现的Python解释器的动态编译器,是Armin Rigo开发的产品,能够提升我们python项目的运行速度。PyPy 是利用即时编译的 Python 的替代实现。背后的原理是 PyPy 开始时就像一个解释器,直接从源文件运行我们的 Python 代码。但是,PyPy 不是逐行运行代码,而是在执行它们之前将部分代码编译为机器代码。


根据官方文档的介绍可以看到,平均下来PyPy比CPython(也就是我们主流使用的python)快4.5倍:


PyPy除了速度快外,还有下面一些特点:

  1. 内存使用情况比cpython少
  2. gc策略更优化
  3. Stackless 协程模式默认支持,支持高并发
  4. 兼容性好,高度兼容cpython实现,基本可以无缝切换
  5. PyPy为许多平台和操作系统提供预编译的二进制文件:


二、PyPy安装

我们直接访问下载地址:https://www.pypy.org/download.html 下载对应的包使用即可。

下载完成后解压到任意目录然后加入到环境变量中:


然后在控制台中执行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也有一些库是不支持的:

  1. pyinstrument
  2. sshtunnel

这只是我经常使用的一些库中发现不支持的库,但绝大部分的库都是支持的,比如Django、requests、pymysql 等。


另外,对于诸如numpypandas这类本身就是C语言开发的扩展时,PyPy的性能反而会更低,PyPy只对纯Python库有明显的性能提升。


最后在你决定要使用PyPy时,你应该思考你的项目是否有性能瓶颈,或者性能瓶颈是因为Python本身效率慢的问题。如果是后端接口项目(类似使用flask、django开发的后端)其性能瓶颈往往在SQL的执行和代码本身的逻辑问题上,而不是python执行慢导致的。所以即便你使用了PyPy也大概率不能解决你的性能问题。

目录
相关文章
|
2月前
|
Python
Python项目配置Dockerfile
该Dockerfile基于阿里云Alinux3的Python 3.11.1镜像构建,使用阿里云PyPI镜像加速依赖安装,部署一个运行于5000端口、时区为上海的Python应用。
142 1
|
4月前
|
机器学习/深度学习 数据采集 算法
Python AutoML框架选型攻略:7个工具性能对比与应用指南
本文系统介绍了主流Python AutoML库的技术特点与适用场景,涵盖AutoGluon、PyCaret、TPOT、Auto-sklearn、H2O AutoML及AutoKeras等工具,帮助开发者根据项目需求高效选择自动化机器学习方案。
377 1
|
6天前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
55 1
|
18天前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
|
6天前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
43 0
|
6月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
2月前
|
数据采集 存储 Web App开发
Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
本文深入解析Python爬虫库的性能与选型策略,涵盖需求分析、技术评估与实战案例,助你构建高效稳定的数据采集系统。
258 0
|
4月前
|
监控 大数据 API
Python 技术员实践指南:从项目落地到技术优化
本内容涵盖Python开发的实战项目、技术攻关与工程化实践,包括自动化脚本(日志分析系统)和Web后端(轻量化API服务)两大项目类型。通过使用正则表达式、Flask框架等技术,解决日志分析效率低与API服务性能优化等问题。同时深入探讨内存泄漏排查、CPU瓶颈优化,并提供团队协作规范与代码审查流程。延伸至AI、大数据及DevOps领域,如商品推荐系统、PySpark数据处理和Airflow任务编排,助力开发者全面提升从编码到架构的能力,积累高并发与大数据场景下的实战经验。
Python 技术员实践指南:从项目落地到技术优化
|
5月前
|
网络协议 API 开发者
分析http.client与requests在Python中的性能差异并优化。
合理地选择 `http.client`和 `requests`库以及在此基础上优化代码,可以帮助你的Python网络编程更加顺利,无论是在性能还是在易用性上。我们通常推荐使用 `requests`库,因为它的易用性。对于需要大量详细控制的任务,或者对性能有严格要求的情况,可以考虑使用 `http.client`库。同时,不断优化并管理员连接、设定合理超时和重试都是提高网络访问效率和稳定性的好方式。
124 19
|
4月前
|
网络协议 API Python
解析http.client与requests在Python中的性能比较和改进策略。
最后,需要明确的是,这两种库各有其优点和适用场景。`http.client` 更适合于基础且并行的请求,`requests` 则因其易用且强大的功能,更适用于复杂的 HTTP 场景。对于哪种更适合你的应用,可能需要你自己进行实际的测试来确定。
123 10

热门文章

最新文章

推荐镜像

更多