Python 潮流周刊#29:Rust 会比 Python 慢?!

△请给“Python猫”加星标 ,以免错过文章推送

0ece37a98730bbeecfef368167e4b9f3.jpeg

你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯。

🐱产品推荐

FlowUs 息流是新一代知识管理与协作平台,支持云文档、多维表、文件夹、团队空间,提供 100+ 模板,可用于管理笔记、安排计划、文档协作、制作个人主页等。猫哥邀请你一起用 FlowUs 提升个人生产力:

d7448ca2732a23e31a09c5b835fc9512.png

🦄文章&教程

1、Rust std fs 比 Python 慢!真的吗!?

一篇长文,由一个诡异的问题开始:Rust 写的程序竟然比 Python 慢?!作者在定位根因的过程中,多次得到 Rust 方案比 Python 慢的结果,甚至 C 版本代码也比 Python 的慢!层层深入,用上各种定位手段,最后发现竟然是 AMD CPU 内核的问题!

2、Python 中性能最快的时间戳函数是哪个?[3]

Python 中有哪些获取时间戳的函数?它们的性能表现如何?文章取了 7 种函数进行性能测算,发现 time.time() 是最快的。文章发布后引起了一些争议,于是作者写了第二篇,做了 Win10、WSL2 和 Ubuntu20 的对比,也增加了 Python 3.10 和 3.12 的对比。(附:第二篇性能对比的文章[4]

74d319a01d0129d7d764a7adb5040c38.png
调用50万次所需的时间

3、Python 是 Easy,Go 是 Simple,但 Simple != Easy[5]

Python 简单易用门槛低,因为它把很多复杂的工作交给了解释器,这使得它适合用作原型设计,快速开发应用。Go 语言也简单,但相比 Python 的规则要多一些,性能也更高。作者的建议是同时发挥两者的优势。

4、使用 Numba 提升 pandas.DataFrame.apply 的 C 级别性能[6]

在 Pandas 2.2.0 中,DataFrame.apply 可以指定一个新的 numba 引擎,实现并行化的操作。文章介绍了这个引擎的工作原理、它支持的应用场景及无法做到的事,同时给出了多项性能测试的数据。

5、一份杂乱的 Flask 维护任务清单[7]

作者是 Flask 的维护者之一,列出了一份任务清单,提供给 Flask 的贡献者们方便着手处理。我们多数人没有维护开源项目的经验,或许无法想象项目维护者们要做那一大堆与编码完全无关的事。(题外话:Flask 的 star 数在本周已落后于 FastAPI,失去了 Web 框架第二高 star 的位置)

6、用子解释器运行 Python 并行程序[8]

Python 3.12 开放了子解释器的一个 API,它有什么用呢?子解释器与多线程、多进程有什么区别,它们的性能差距有多少?将子解释器用于 Web 开发,会有什么效果?作者用开发中的 Python 3.13 做了一些实验,结果有惊喜也有程序异常。期待明年真正无-GIL 的 Python 吧!

feacb8c93702e3838904db4416a4fcb5.png
工作负载和执行时间的增长率

7、新的开源库 VS. 旧的开源库 [9]

文章选取了 10 组在 Python 社区很知名的库,同时给出它们相对应的替代库,这里最没争议的估计是 Ruff 替代 Pylint,其它则还有:Taipy/Streamlit、Polars/Pandas、Dask/PySpark、PyTorch/TensorFlow ……

8、在 Pandas 的世界中使用 Polars[10]

Polars 是速度更快、内存效率更高、更易于使用的数据处理库,可作为 Pandas 的替换。但是替换后如何与第三方库更好地集成呢?文章介绍了几种处理方法,实现从 Pandas 到 Polars 的无缝切换。

9、Python 的软关键字有哪些?[11]

软关键字(soft keyword)指的是可以被重新赋值的关键字。作者想利用正则表达式从 Python 最新的语法文件中找出所有的软关键字。最后得知只需下面两行代码就能做到(以下是 Python 3.12 的结果,即现在有 4 个软关键字):

>>> import keyword
>>> keyword.softkwlist
['_', 'case', 'match', 'type']

10、用 Python 实现机器人爸爸[12]

为了应对小孩的提问,作者开发了一个“机器人爸爸”。用到了 Eleven Labs 作声音克隆,用 Picovoice 语音转文字提取唤醒词,最后调用 ChatGPT 接口获取答案。

11、如何(以及如何不)设计 REST API[13]

文章列出了十多项 REST API 的最佳实践规则,解释了规则的含义及实现,另外,作者嘲笑了几家公司被广泛使用的 API,将它们作为规则的反例。

12、如何调试 Asyncio 程序?[14]

文章介绍了几种调试 Asyncio 代码的方法,包括启用它的调试日志、在调试模式下运行事件循环、自定义调试信息等。(附:文章的姊妹篇 如何分析 Asyncio 程序?[15] 分析慢程序和高频函数)

🐿️项目&资源

1、marker:高效将 PDF/EPUB/MOBI 转换为 Markdown[16]

支持将多种文件格式转换为 markdown,可删除页眉/页脚,将方程式转换为 latex,格式化处理代码块和表格,另外也支持多种语言。(star 2.3K)(附:将整本 PDF 版《Think Python》转换后的效果[17]

bc21919fc4172cf60b317c71a1450a5b.png
与Nougat在速度和准确性的对比

2、awesome-django-performance:精选资源,用于分析和优化 Django 项目[18]

这个项目整理了一些库、工具、文章和书籍,主要集中在 profile、数据库、缓存、序列化、任务处理和监测等方面。

3、datamodel-code-generator:将 JSON/YAML 转换为 Pydantic 模型[19]

一个数据模型代码生成器,支持多种输入类型(OpenAPI、JSON、YAML、CSV、Python 字典、GraphQL),输出 Pydantic、dataclass、TypeDict 等类型。(star 2K)

4、fastapi-code-generator:用 openapi 文件创建 FastAPI 程序[20]

它利用 datamodel-code-generator 生成 pydantic 模型,基于 OpenAPI 格式的接口文件,快速生成 FastAPI 项目。支持自定义模板,允许将自定义变量传给自定义模板。

5、kanban-python:终端中的看板应用程序[21]

在命令行窗口中实现的看板应用工具,有漂亮的表格、配置与数据分离、可自动创建任务、可作任务跟踪。

7f33a2d3679bf6d82f487271d10a9205.png
看板应用的示例

6、saq:简单的异步队列[22]

一个基于 Asyncio 和 Redis 之上的简单且高性能的任务队列框架。提供有一个简单的 UI,可查看任务队列、状态及执行详情等信息。

7、pyqtgraph:用于科学/工程应用的数据可视化及 GUI 工具[23]

一个高性能的绘图工具库,利用 Numpy 作数值运算、用 Qt 的 GraphicsView 框架作 2D 显示和 OpenGL 作 3D 显示。(star 3.5K)

8、toga:Python 原生、OS 原生的 GUI 工具包[24]

一个用于创建跨平台桌面应用的 GUI 工具,支持 MacOS、Windows、Linux (GTK)、Android、iOS 和单页 Web 应用。(star 3.9K)

9、autometrics-py:函数级的指标监测工具[25]

它提供了一个装饰器,可检测函数的请求率、错误率和延迟等指标,方便你识别和调试程序的问题。支持用 Prometheus 查询与分析、开箱即用的 Grafana 仪表板、自定义告警、运行开销小。

45137eacb032ed72f112f1ce015d55c2.png

10、compiled:Python 标准库的编译后的变体[26]

Python 中有些标准库是用纯 Python 实现的,可能会成为性能瓶颈。这个项目将经过 mypyc 类型检查的标准库编译成 C 代码版本,比原始版本快 2-4 倍。目前已完成 tomllib 和 difflib,计划中还有 asyncio、urllib、zipfile、argparse 和 uuid。

11、transpyler-gpt:GPT 驱动的 Python 转译器,让代码在旧版本上运行[27]

它借助 GPT 将高版本 Python 代码转译成目标环境的 Python 版本代码,实现向下兼容执行。例如将 Python 3.10+ 的 match-case 代码转译成 if-else 代码,可在更低 Python 版本中执行。

12、clone-voice: 一个带 web 界面的声音克隆工具[28]

支持中文、英文、日语、韩语 4 种语言,可在线从麦克风录制声音。支持文字转语音和语音变声。(star 1.3K)

975e70fabde1f1091a0e5e3b02de0fcb.png
语音克隆演示

🐢播客&视频

1、Talk Python To Me #439:Pixi 一个高性能的包管理器[29]

Pixi 是用 Rust 开发的基于 Conda 的包管理器。

2、Mouse Vs Python #23:与 Charlie Marsh 聊 Ruff Formatter[30]

Ruff 是一个用 Rust 编写的 Python linter+formatter,而且两方面都是性能最快的。

🥂讨论&问题

1、你用 Python 做过最酷的事情是什么?[31]

Reddit 上的热门讨论帖,也有近 700 条评论,需要刷很久才能看完。。。

2、鼓励使用命名参数的语法糖[32]

函数的命名参数提高了可读性,但也可能使代码重复和冗长。作者提出了一个简化变量写法的语法糖,得到了不少核心开发者的支持。

🐼欢迎订阅

  • 微信公众号[33]:除更新周刊外,还发布其它原创作品,并转载一些优质文章。(可加好友,可加读者交流群)

  • 博客[34] 及 RSS[35]:我的独立博客,上面有历年原创/翻译的技术文章,以及从 2009 年以来的一些随笔。

  • Github[36]:你可以获取本周刊的 Markdown 源文件,做任何想做的事!

  • 邮件[37]:在 Substack 上开通的频道,满足你通过邮件阅读时事通讯的诉求。

  • Telegram[38]:除了发布周刊的通知外,我将它视为一个“副刊”,补充发布更加丰富的资讯。

  • Twitter[39]:我的关注列表里有大量 Python 相关的开发者与组织的账号。

参考资料

[1]

投稿: https://github.com/chinesehuazhou/python-weekly

[2]

电报频道: https://t.me/pythontrendingweekly

[3]

Python 中性能最快的时间戳函数是哪个?: https://www.dataroc.ca/blog/most-performant-timestamp-functions-python

[4]

第二篇性能对比的文章: https://www.dataroc.ca/blog/most-performant-timestamp-functions-python-2

[5]

Python 是 Easy,Go 是 Simple,但 Simple != Easy: https://preslav.me/2023/11/27/python-is-easy-golang-is-simple-simple-is-not-easy/

[6]

使用 Numba 提升 pandas.DataFrame.apply 的 C 级别性能: https://labs.quansight.org/blog/unlocking-c-level-performance-in-df-apply

[7]

一份杂乱的 Flask 维护任务清单: https://davidism.com/maintainer-notes/

[8]

用子解释器运行 Python 并行程序: https://tonybaloney.github.io/posts/sub-interpreter-web-workers.html

[9]

新的开源库 VS. 旧的开源库 : https://dev.to/taipy/new-open-source-vs-old-open-source-33k7

[10]

在 Pandas 的世界中使用 Polars: https://pythonspeed.com/articles/polars-pandas-interopability/

[11]

Python 的软关键字有哪些?: https://mathspp.com/blog/til/pythons-soft-keywords

[12]

用 Python 实现机器人爸爸: https://blog.untrod.com/2023/11/robot-dad.html

[13]

如何(以及如何不)设计 REST API: https://github.com/stickfigure/blog/wiki/How-to-(and-how-not-to)-design-REST-APIs

[14]

如何调试 Asyncio 程序?: https://superfastpython.com/debug-asyncio/

[15]

如何分析 Asyncio 程序?: https://superfastpython.com/profile-asyncio-programs/

[16]

marker:高效将 PDF/EPUB/MOBI 转换为 Markdown: https://github.com/VikParuchuri/marker

[17]

转换后的效果: https://github.com/VikParuchuri/marker/blob/master/data/examples/marker/thinkpython.md

[18]

awesome-django-performance:精选资源,用于分析和优化 Django 项目: https://github.com/st3v3nmw/awesome-django-performance

[19]

datamodel-code-generator:将 JSON/YAML 转换为 Pydantic 模型: https://github.com/koxudaxi/datamodel-code-generator

[20]

fastapi-code-generator:用 openapi 文件创建 FastAPI 程序: https://github.com/koxudaxi/fastapi-code-generator

[21]

kanban-python:终端中的看板应用程序: https://github.com/Zaloog/kanban-python

[22]

saq:简单的异步队列: https://github.com/tobymao/saq

[23]

pyqtgraph:用于科学/工程应用的数据可视化及 GUI 工具: https://github.com/pyqtgraph/pyqtgraph

[24]

toga:Python 原生、OS 原生的 GUI 工具包: https://github.com/beeware/toga

[25]

autometrics-py:函数级的指标监测工具: https://github.com/autometrics-dev/autometrics-py

[26]

compiled:Python 标准库的编译后的变体: https://github.com/pycompiled/compiled

[27]

transpyler-gpt:GPT 驱动的 Python 转译器,让代码在旧版本上运行: https://github.com/frostming/transpyler-gpt

[28]

clone-voice: 一个带 web 界面的声音克隆工具: https://github.com/jianchang512/clone-voice

[29]

Talk Python To Me #439:Pixi 一个高性能的包管理器: https://talkpython.fm/episodes/show/439/pixi-a-fast-package-manager

[30]

Mouse Vs Python #23:与 Charlie Marsh 聊 Ruff Formatter: https://www.blog.pythonlibrary.org/2023/11/27/episode-23-the-ruff-formatter-with-charlie-marsh/

[31]

你用 Python 做过最酷的事情是什么?: https://www.reddit.com/r/Python/comments/17upt2f/whats_the_coolest_things_youve_done_with_python/

[32]

鼓励使用命名参数的语法糖: https://discuss.python.org/t/syntactic-sugar-to-encourage-use-of-named-arguments/36217

[33]

微信公众号: https://img.pythoncat.top/python_cat.jpg

[34]

博客: https://pythoncat.top

[35]

RSS: https://pythoncat.top/rss.xml

[36]

Github: https://github.com/chinesehuazhou/python-weekly

[37]

邮件: https://pythoncat.substack.com

[38]

Telegram: https://t.me/pythontrendingweekly

[39]

Twitter: https://twitter.com/chinesehuazhou

12b46465b1b30e905305782fe35c0830.gif

如果你觉得本文有帮助

请慷慨分享点赞,感谢啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/209445.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法基础--双指针

前面已经写了两篇关于算法方面的文章,这几天想了下,决定把这个算法整理成一个系列,除了是帮助自己巩固算法知识外,还能够把自己总结的每种算法的套路保存下来并分享给大家,这样以后即使是哪天想要重拾起来,…

简单可行的SeruatV4的安装方案

目前Seurat的版本从V4升级到了V5,由于一些变化,导致当年取巧,使用获取数据的方法都无法在V5中使用。 建议在操作前重启下Rstudio(或更确切的说是R)!!! 那么如何确保自己能够安装V4的…

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标☆

【字符串匹配】【KMP算法】Leetcode 28 找出字符串中第一个匹配项的下标 (1)前缀和后缀(2)前缀表(最长相同的前缀和后缀的长度)(3)匹配过程示意(4)next数组的…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

[LeetCode周赛复盘] 第 374 场周赛20231203

[LeetCode周赛复盘] 第 374 场周赛20231203 一、本周周赛总结100144. 找出峰值1. 题目描述2. 思路分析3. 代码实现 100153. 需要添加的硬币的最小数量1. 题目描述2. 思路分析3. 代码实现 100145. 统计完全子字符串1. 题目描述2. 思路分析3. 代码实现 100146. 统计感冒序列的数…

使用Linux docker方式快速安装Plik并结合内网穿透实现公网访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…

C语言扫雷游戏

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、扫雷游戏的分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析1.3文件结构设计 二、扫雷游戏的代码实现总结 前言 详细介绍扫雷游戏的思路和实现过程。 一…

高校人员信息管理系统C++

代码:https://mbd.pub/o/bread/ZZeZk5lx 一、基本内容论述 1、问题描述 某高校有四类员工:教师、实验员、行政人员、教师兼行政人员;共有的信息包括:编号、姓名、性别、年龄等。其中,教师还包含的信息有:所…

堆排序(C语言)

前言 在上一篇内容:大小堆的实现(C语言),我们实现了关于创建大小堆的各函数与实现。但是如果突然要使用一个堆排序但是此时并没有一个现成的堆,这就需要花费时间去新建实现堆的插入删除这些操作从而实现一个堆&#xf…

51单片机应用从零开始(十)·指针

指针 C语言指针是一种保存变量地址的数据类型。它可以让程序直接访问内存中的数据,而不需要通过变量名来访问。指针变量存储的是一个地址,这个地址指向内存中的某个位置,该位置存储了一个值。 在C语言中,可以使用&运算符取得一…

Endnote加入新的style(参考文献格式)

1. 下载模板 可以从官网上下载模板,比如某些常见的期刊都有自己的模板,还有写中文论文的话有专门的GBT7714。 2. 示范 以下图MDPI为例,下载下来是一个ens文件。 双击打开此文件 file -> save as 输入保存的名字,我这里保…

字符串转换整数

字符串转换整数 描述 : 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一个字符&am…

Linux:docker镜像的创建(5)

1.基于已有镜像创建 步骤: 1.将原始镜像加入容器并运行 2.在原始镜像中部署各种服务 3.退出容器 4.使用下面命令将容器生成新的镜像 现在我们在这个容器里做了一些配置,我们要把他做成自己镜像 docker commit -m "centos7_123" -a "tarr…

【工具使用-Audition】如何使用Audition查看频率

一,简介 在工作过程中要对处理后的音频进行频率分析,本文以Audition 2020为例进行说明,供参考。 二,操作步骤 2.1 生成测试音源 使用Audition生成左通道为1KHz,右通道为10KHz的音源信号 如图所示: 2.…

Android Init系统:引领设备启动的先锋

Android Init系统:引领设备启动的先锋 引言 Init系统是一个操作系统启动的必要组件,负责在启动时初始化所有系统资源、服务和应用程序。在Android设备中,Init系统起到了至关重要的作用,它是启动过程中的第一个进程,负…

学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)

文章目录 如何远程连接MySQL数据库1.创建用户来运行,此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议(超文本传输协议)简介HTT…

C++-模板

目录 一.泛型编程 二.模板的分类 三.函数模板 1.函数模板的概念 2.函数模板格式 3.函数模板的原理 4.函数模板的实例化 a.隐式实例化 b.显式实例化 5.模板参数的匹配原则 四.类模板 1.类模板的定义格式 2.类模板的实例化 五.class和typename的区别 六.非类型模板…

路由策略,gRPC 路由如何实现

目录 一、为啥我们要路由策略: 二、基于gRPC 路由策略 一、为啥我们要路由策略: 我们可以重新回到调用方发起 RPC 调用的流程。在 RPC 发起真实请求的时候,有一个步骤就是从服务提供方节点集合里面选择一个合适的节点(就是我们…

C++基础 -37- 模板函数与普通函数调用规则

当模板函数比普通函数更好匹配形参的时候&#xff0c;会优先调用模板函数 #include "iostream"using namespace std;template <class T> void show(T a, T b) {cout << a << endl;cout << b << endl;cout << "temp show&…

Matlab论文插图绘制模板第129期—函数网格曲面图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 进一步&#xff0c;再来分享一下函数网格曲面图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…