来源: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%:使用冒泡排序和递归函数对比测试相关推荐

  1. Python 3.11 正式版发布,比 3.10 快 10-60%,官方:这或许是最好的版本

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 想要体验新功能的小伙伴赶紧去试试新版本吧! 终于,Python 3.11 正式版发布了! 2020 年 1 月 1 ...

  2. 官方:最好的版本!Python 3.11正式版来了!

    (点击上方快速关注并设置为星标,一起学Python) 机器之心报道 编辑:陈萍.杜伟 想要体验新功能的小伙伴赶紧去试试新版本吧! 终于,Python 3.11 正式版发布了! 2020 年 1 月 1 ...

  3. Python 3.11 终于发布了,性能大提升!

    来源:https://realpython.com/python311-new-features 推荐阅读:终于来了,[第三期] 彭涛Python 爬虫特训营!! 终于,Python 3.11 正式版 ...

  4. Python 3.11 ,即将变得更快!

    点击上方"菜学Python",选择"星标"公众号 超级无敌干货,第一时间送达!!! 大家好,我是菜鸟哥. 作为一门异常受欢迎的编程语言,Python的优点有很多 ...

  5. 《深入Python》-11. HTTP Web 服务

    <深入Python>-11. HTTP Web 服务 11. HTTP Web 服务 出处: http://www.woodpecker.org.cn/diveintopython/htt ...

  6. Python 3.11 的 5 个很酷的新特性

    Python 3.11 的测试版预览版于已于 5 月 8 日发布,其最终版本预计将于 2022 年 10 月发布,每个新版本都附带新功能,这里分享一下 Python 3.11 的 5 个很酷的新特性. ...

  7. python进阶11并发之七多种并发方式的效率测试

    原创博客地址:python进阶11并发之七多种并发方式的效率测试 测试map,apply_async,gevent协程爬虫 测试代码:网页爬虫 函数代码 1 2 3 4 5 6 7 8 9 10 11 ...

  8. 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算

    目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...

  9. 国产办公软件崛起,金山WPS月活用户已超5.7亿;Meta指责苹果夺走部分广告收入;Python 3.11 发布

    一分钟速览新闻点! 国产办公软件崛起 金山WPS月活用户已超5.7亿 美团开始招聘香港工作人员 第一代没人用!台积电第二代3nm工艺首颗芯片流片 华为因专利纠纷起诉亚马逊 目前正着手全球维权行动 抖音 ...

最新文章

  1. 修复计算机怎么操作系统,如何巧妙恢复被误删的操作系统分区
  2. 5月书讯:藏一个愿望等风来
  3. 【博客】搭建个人博客边学边搭(一个晚上)
  4. c语言课程设计作业摇一摇,口才星教案第二册.doc
  5. 第16课 火眼金睛——人脸识别
  6. 面试题28:JS实现继承有几种方式
  7. 如何在计算机快速删掉快捷方式,电脑桌面上的网页快捷方式怎么删除?怎么在桌面便签上快速删除网页快捷方式...
  8. 扫码枪 android EditText
  9. 未来新型计算机可分为哪三种,未来有可能引起计算机技术革命有哪几种呢
  10. #93 输出N以内的所有素数
  11. Apache Thrift 介绍
  12. 网站并发量的计算方法
  13. Matlab / ArcGIS 处理GPM全球月均降水数据
  14. OpenGL光源位置
  15. 电脑显示U盘,但是读取不了
  16. POI使用详解 java 复杂excel导出
  17. Spring context:annotation-config/ 解说
  18. 人工神经网络技术及应用,人工神经网络发展前景
  19. Per-Server/Per-Seat 许可证的区别
  20. Java小农养成记第二十一天

热门文章

  1. App Store 开发者账号的APP 转让问题记录
  2. Android知识点及资料汇总(不断更新中)
  3. 完整的项目管理流程什么样?一次读懂项目管理5步骤
  4. 宝宝爱吃手指是饿了吗?
  5. CSDN超级实习生计划——大厂实习直通车,年薪最高可达30W。2022正式开启~
  6. 运动目标检测(GMM、Code Book、Vibe)
  7. catia相合约束怎么反向_CATIA(三)——悬架DMU汇总
  8. 让字体显得更平滑的CSS方法
  9. csdn最新最牛最细python系列【python高阶:自动化相关技能】 python全栈自动化测试系类4-4
  10. mysql报错:mysql5.7和mysql8,查询时sql关键字rank问题