Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?
你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。
本周刊精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。
>>> 微信 | 博客 | 邮件 | Github | Telegram | Twitter <<<
原文链接:https://pythoncat.top/posts/2023-08-12-weekly
🦄文章&教程
如何分析 FastAPI 异步请求的性能?
cProfile 这种基于函数调用的分析工具无法有效分析异步操作的执行时间,文章介绍了 pyinstrument 这个分析库,结合 FastAPI.middleware 装饰器,并使用 speedscope 来可视化 FastAPI 程序的耗时情况。
利用 FastAPI 的后台任务:增强性能和响应能力
介绍了 FastAPI 的 BackgroundTasks,可以创建后台任务,用于管理长时间运行的任务,而不阻塞主进程。
使用 Python 创建直方图
直方图又名“柱状图”,可直观查看数据的分布趋势、离散程度和异常值等信息。文中介绍了 Matplotlib、Plotly、Seaborn、Numpy 和 Pandas 等工具绘制直方图的方法,介绍各种直方图的样式和风格、处理异常值、分析时间序列数据等。
Mypy 1.5 发布了
Mypy 是 Python 的静态类型检查工具,1.5 版本主要功能有:不再支持 Python 3.7、更灵活的 TypedDict 创建和更新、可显示错误代码的文档链接、实验性改进了泛型函数的类型推断、对 Python 3.12 的部分支持,等等。
在 Linux 上运行 Python 的“Hello World”脚本时,会发生什么?
在 py 文件中写上一句print("hello world")
,然后在命令行执行这个文件,幕后都发生了什么呢?文章使用了 readelf
、strace
、ldd
、debugfs
、/proc
、ltrace
、dd
和 stat
等工具,详细解释了脚本被执行的过程。主要涉及操作系统相关的内容,而不是 CPython 解释器。(附:文章还引用了最近很火的 Putting the "You" in CPU ,介绍计算机是如何运行程序的,强烈推荐!)
通过对比 Python 来学习 PostScript
PostScript 是电子出版和桌面出版领域的页面描述语言,广泛用于打印机、出版和图形设备。文章将一段 PostScript 程序直译成 Python 代码,可以让你快速了解这门语言的语法。
Python 中不那么随意的性能优化
作者的一段代码,用 Rust 花了 950 毫秒,而 Python 却花 70 秒!这怎么能忍!将生成器写法改成 for 循环后,只是轻微提速,使用 Numpy 和多进程做了一些优化后,终于看到了比较可观的数据。不同代码方案的对比、Python 底层工作原理、内存使用效率问题,以及语言特性的差异。
在 Python 中创建上下文管理器
如何用 Python 创建自己的上下文管理器?上下文管理器是可以在 with
代码块中使用的对象,在进入和退出时做一些操作。文章介绍了上下文管理器的实现细节。
一个简单的模块,可以篡改 Python 解释器的数字
一篇有意思的文章。导入一个模块后,可以将 8 和 9 互换,即print(8)
会打印出 9。文章展示了如何用 C 编写一个简单的模块,介绍了 CPython 中整数对象池的实现,并通过修改两个整数的引用,实现一个简单的篡改数字的效果。
为什么说 Python 很糟糕……
一篇给 Python 泼冷水的文章,主要观点是认为 Python 不适合于开发大型应用。批评的点包括动态和鸭子类型、性能问题、代码维护和重构难等问题。
Python 中错误处理的最佳实践
Python 之禅说“错误不应该悄无声息地被忽略”,强调了应该直面错误和透明处理。文章指出了一些糟糕的错误处理写法,给出了尽早检查错误、快速失败处理等编程建议。
使用企业数据和 Python 构建 GPT 对话机器人
这篇教程介绍了搭建企业中 GPT 对话机器人的完整流程,包括数据索引、查询检索、集成 LLM、使用 FastAPI 开发接口、uvicorn 作部署。
Python 鸡尾酒:将上下文管理器和迭代器等量混合
tenacity 库提供了一种用迭代器和上下文管理器组合的写法,实现重试机制。这篇文章演示了如何用自定义的迭代器和上下文管理器,来实现同样的功能,可以让你更深入理解这两个好用的特性。
索引的力量:利用 Pandas 提高数据整理效率
Pandas 被广泛用于数据处理,文章介绍了如何高效利用索引技术,提升它整理数据的速度和效率。介绍了多种索引技术,例如基于整数的索引、布尔索引、设置新索引并重置旧索引、排序索引。
杀死 ProcessPoolExecutor
Python 不适合处理 CPU 密集型任务,文章中项目原本使用进程池来规避 GIL 问题,后使用线程、C++ 扩展和更精细调整的 GIL 控制,将内存使用量减少 50%,CPU 使用量减少约 20%,线程和进程减少约 70%,I/O 流量减少 100%。
🎁Python潮流周刊🎁已免费发布了 15 期,访问下方链接,即可查看全部内容:https://pythoncat.top/tags/weekly
原文链接:https://pythoncat.top/posts/2023-08-12-weekly
🐿️项目&资源
pyinstrument:Python 的调用堆栈分析器
一个轻量级、无侵入的 Python 代码性能分析库,支持分析异步任务和事件循环代码,可生成多种格式的分析报告,包括文本、HTML 和火焰图。(star 5.5K)
viztracer:低开销的日志记录/调试/分析工具,可视化 Python 代码的执行
国人开源的日志记录/调试/分析工具,支持线程、多进程、子进程和异步,支持火焰图、远程连接、虚拟调试等,有强大的前端,可流畅渲染 GB 级堆栈信息。(star 3.5K)
tenacity:Python 重试库
可提供简单而灵活的方式来实现可靠的重试机制,支持指定重试次数、重试间隔时间、重试的回调函数、根据不同的错误条件进行重试等功能,减少手动处理错误和异常的麻烦。(star 5.1K)
litestar:轻量、灵活且可扩展的 ASGI API 框架
一个高性能的 ASGI API 框架,其早期版本是基于 Starlette 开发的,命名为 Starlite,但从 2.0 版本起已完全移除 Starlette 依赖,并改名为 litestar。核心特性:基于类的控制器、依赖注入、分层中间件、插件系统、OpenAPI 3.1、内置 Trio,等等。(star 2.5K)
Make-It-3D:利用单个图像创建高保真 3D 模型
从图片中分割物体,创建高保真的 3D 几何形状,可作 360° 旋转展示。(star 1.2K)
Color-diffusion:对黑白图像进行着色的扩散模型
使用 diffusion 模型对黑白图像进行着色,使用 LAB 色彩空间实现,这是 RGB 色彩空间的 3 通道替代方案。
DevOpsGPT:AI 驱动的自动化软件开发系统
将 LLM 与 DevOps 工具相结合,将自然语言需求转换为可工作的软件。无需繁琐的需求文档编写与沟通,缩短开发与交付时间,加速软件部署和迭代。(star 1.2K)
ILibCST:Python 的具体语法树解析器和序列化器库
具体语法树(Concrete Syntax Tree)是在词法分析和语法分析阶段后生成的一种数据结构,可用于分析代码结构,执行语义分析、重构优化和代码生成等操作。(star 1.2K)
hypothesis:功能强大、灵活且易于使用的库,用于基于属性的测试
基于属性的测试(Property-based Testing)是一种软件测试方法,其中测试用例的生成和验证是基于定义的属性或规约。传统的单元测试要给定具体的测试用例,而基于属性的测试则是随机生成大量的测试数据。(star 6.8K)
🐢播客&视频
Python People 播客
这是一档新上线一个月的播客栏目,每周访谈 Python 社区里一位有突出贡献的大佬。目前已访谈的嘉宾有 Michael Kennedy(Talk Python to Me 和 Python Bytes 的主理人)、Paul Everitt( JetBrains 和 PyCharm 的开发者倡导者)、Brett Cannon(Python 核心开发者)、Barry Warsaw(Python 核心开发者,非常早的成员)、Bob Belderbos(Pybites 的主理人)。
Talk Python To Me #426:PyScript 的新增功能
Pyscript 使 Python 能够在浏览器中运行。这期播客聊了它的最新进展。
Stack Overflow Blog #597:了解 SRE
网站可靠性工程(Site Reliability Engineering,SRE)是什么?它和 DevOps 有什么关系?如何平衡 SRE 的原则与组织结构的关系?生成式 AI 对 SRE 会带来什么影响?
Stack Overflow Blog #593:Python 团队如何调整语言以适应 AI 的未来
播客嘉宾是 Python 核心开发者和指导委员会成员 Pablo Galindo Salgado,讨论了如何平衡语言设计中的一致性和新功能、为什么收集社区对新版本的反馈很重要,以及为何他要专注于让 Python 更快。
🐱赞助&支持
如果你喜欢周刊,请分享给其他需要的同学,让更多人可以从中受益~