Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试
来源:DeepHub IMBA
本文共1300字,建议阅读5分钟本文验证Python 3.11的性能优化。
Python 3.11 pre-release已经发布。更新日志中提到:
Python 3.11 is up to 10–60% faster than Python 3.10. On average, we measured a 1.25x speedup on the standard benchmark suite. See Faster CPython for details. — Python 3.11 Changelog.
Python 在生产系统上的速度一直是被新手对比和吐槽。因为真的并不快,为了解决性能问题,我们总是需要使用 Cython 或 Tuplex 转换关键代码。
Python 3.11中特意强了这个优化,我们可以实际验证下到底有没有官方说的平均1.25倍的提升呢?
作为数据科学来说,我更期待的是看看它在 Pandas 处理DF方面是否有任何改进。
首先,让我们尝试一些斐波那契数列。
安装Python 3.11 pre-release
windows的话可以在官方下载安装文件,ubuntu可以用apt命令进行安装
sudo apt install Python3.11
我们在工作中还不能直接使用3.11。所以需要创建单独的虚拟环境来保存两个 Python 版本。
$ virtualenv env10 --python=3.10
$ virtualenv env11 --python=3.11# To activate v11 you can run,
$ source env11/bin/activate
Python 3.11 与 Python 3.10 相比有多快?
我创建了一个小函数来生成一些斐波那契数。
def fib(n: int) -> int:return n if n < 2 else fib(n - 1) + fib(n - 2)
用 Timeit 运行上面的斐波那契数生成器来确定执行时间。以下命令将重复生成过程十次并显示最佳执行时间。
# To generate the (n)th Fibonacci number
python -m timeit -n 10 "from fib import fib;fib(n)"
以下是 Python 3.10 和 Python 3.11 上的结果
Python 3.11 在每次运行中都优于 Python 3.10。执行时间大约是 3.11 版本的一半。
我其实是想确认它在 Pandas 任务上的表现。但不幸的是,到目前为止Numpy 和 Pandas 还没有支持 Python 3.11 的版本。
冒泡排序
由于无法对 Pandas 进行基准测试,因此我们试试一般常见的计算时的性能对比,测量对一百万个数字进行排序所花费的时间。排序是日常使用的最多也是最常用的一个操作了,相信它的结果可以为我们提供一个很好的参考。
import random
from timeit import timeit
from typing import Listdef bubble_sort(items: List[int]) -> List[int]:n = len(items)for i in range(n - 1):for j in range(0, n - i - 1):if items[j] > items[j + 1]:items[j], items[j + 1] = items[j + 1], items[j]numbers = [random.randint(1, 10000) for i in range(1000000)]print(timeit(lambda:bubble_sort(numbers),number=5))
上面的代码生成了一百万个随机数。timeit 函数被设置为仅测量冒泡排序函数执行的持续时间。
结果如下
Python 3.11 只用了 21 秒来排序,而 3.10 对应的用时 39 秒。
I/O 操作是否存在性能差异?
这两个版本在磁盘上读写信息的速度有差异吗。在pandas读取df还有深度学习读取数据时 I/O 性能至关重要。
这里准备了2个程序,第一个将一百万个文件写入磁盘。
from timeit import timeitstatement = """
for i in range(100000):with open(f"./data/a{i}.txt", "w") as f:f.write('a')
"""print(timeit(statement, number=10))
我们使用 timeit 函数来打印持续时间。可以多次重复该任务并通过设置 number 参数取平均值。
第二个程序也使用 timeit 函数。但它只读取一百万个文件。
from glob import glob
from timeit import timeitfile_paths = glob("./data/*.txt")statement = f"""
for path in {file_paths}:with open(path, "r") as f:f.read()
"""print(timeit(statement, number=10))
下面是我们运行两个版本的输出。
虽然看起来 Python 3.10 比 Python 3.11 有优势,但并不重要。因为多次运行这个实验会得出不同的结论,但是能够肯定的是I/O方面并没有提升。
总结
Python 3.11 仍然是一个预发布版本。3但它似乎是 Python 历史上一个了不起的版本。它比之前的版本快了 60%,这个判断还是没毛病的,我们上面的一些实验也证明了 Python 3.11 确实更快。
译者注:前几天刚把以前项目升级到了3.6,新项目都使用3.9开发了,现在3.11又马上要发布了,而且还说性能有大幅提升,龟叔你这是要闹哪样。
编辑:于腾凯
校对:林亦霖
Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试相关推荐
- Python 3.11 正式版发布,比 3.10 快 10-60%,官方:这或许是最好的版本
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 想要体验新功能的小伙伴赶紧去试试新版本吧! 终于,Python 3.11 正式版发布了! 2020 年 1 月 1 ...
- 官方:最好的版本!Python 3.11正式版来了!
(点击上方快速关注并设置为星标,一起学Python) 机器之心报道 编辑:陈萍.杜伟 想要体验新功能的小伙伴赶紧去试试新版本吧! 终于,Python 3.11 正式版发布了! 2020 年 1 月 1 ...
- Python 3.11 终于发布了,性能大提升!
来源:https://realpython.com/python311-new-features 推荐阅读:终于来了,[第三期] 彭涛Python 爬虫特训营!! 终于,Python 3.11 正式版 ...
- Python 3.11 ,即将变得更快!
点击上方"菜学Python",选择"星标"公众号 超级无敌干货,第一时间送达!!! 大家好,我是菜鸟哥. 作为一门异常受欢迎的编程语言,Python的优点有很多 ...
- 《深入Python》-11. HTTP Web 服务
<深入Python>-11. HTTP Web 服务 11. HTTP Web 服务 出处: http://www.woodpecker.org.cn/diveintopython/htt ...
- Python 3.11 的 5 个很酷的新特性
Python 3.11 的测试版预览版于已于 5 月 8 日发布,其最终版本预计将于 2022 年 10 月发布,每个新版本都附带新功能,这里分享一下 Python 3.11 的 5 个很酷的新特性. ...
- python进阶11并发之七多种并发方式的效率测试
原创博客地址:python进阶11并发之七多种并发方式的效率测试 测试map,apply_async,gevent协程爬虫 测试代码:网页爬虫 函数代码 1 2 3 4 5 6 7 8 9 10 11 ...
- 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算
目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...
- 国产办公软件崛起,金山WPS月活用户已超5.7亿;Meta指责苹果夺走部分广告收入;Python 3.11 发布
一分钟速览新闻点! 国产办公软件崛起 金山WPS月活用户已超5.7亿 美团开始招聘香港工作人员 第一代没人用!台积电第二代3nm工艺首颗芯片流片 华为因专利纠纷起诉亚马逊 目前正着手全球维权行动 抖音 ...
最新文章
- 修复计算机怎么操作系统,如何巧妙恢复被误删的操作系统分区
- 5月书讯:藏一个愿望等风来
- 【博客】搭建个人博客边学边搭(一个晚上)
- c语言课程设计作业摇一摇,口才星教案第二册.doc
- 第16课 火眼金睛——人脸识别
- 面试题28:JS实现继承有几种方式
- 如何在计算机快速删掉快捷方式,电脑桌面上的网页快捷方式怎么删除?怎么在桌面便签上快速删除网页快捷方式...
- 扫码枪 android EditText
- 未来新型计算机可分为哪三种,未来有可能引起计算机技术革命有哪几种呢
- #93 输出N以内的所有素数
- Apache Thrift 介绍
- 网站并发量的计算方法
- Matlab / ArcGIS 处理GPM全球月均降水数据
- OpenGL光源位置
- 电脑显示U盘,但是读取不了
- POI使用详解 java 复杂excel导出
- Spring context:annotation-config/ 解说
- 人工神经网络技术及应用,人工神经网络发展前景
- Per-Server/Per-Seat 许可证的区别
- Java小农养成记第二十一天
热门文章
- App Store 开发者账号的APP 转让问题记录
- Android知识点及资料汇总(不断更新中)
- 完整的项目管理流程什么样?一次读懂项目管理5步骤
- 宝宝爱吃手指是饿了吗?
- CSDN超级实习生计划——大厂实习直通车,年薪最高可达30W。2022正式开启~
- 运动目标检测(GMM、Code Book、Vibe)
- catia相合约束怎么反向_CATIA(三)——悬架DMU汇总
- 让字体显得更平滑的CSS方法
- csdn最新最牛最细python系列【python高阶:自动化相关技能】 python全栈自动化测试系类4-4
- mysql报错:mysql5.7和mysql8,查询时sql关键字rank问题