Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?

news2024/11/23 13:18:27

你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。

本周刊精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职业和副业的收入。

>>> 微信 | 博客 | 邮件 | Github | Telegram | Twitter <<<

原文链接:https://pythoncat.top/posts/2023-08-12-weekly

🦄文章&教程

如何分析 FastAPI 异步请求的性能?

cProfile 这种基于函数调用的分析工具无法有效分析异步操作的执行时间,文章介绍了 pyinstrument 这个分析库,结合 FastAPI.middleware 装饰器,并使用 speedscope 来可视化 FastAPI 程序的耗时情况。

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"),然后在命令行执行这个文件,幕后都发生了什么呢?文章使用了 readelfstraceldddebugfs/procltraceddstat 等工具,详细解释了脚本被执行的过程。主要涉及操作系统相关的内容,而不是 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 更快。

🐱赞助&支持

如果你觉得周刊有价值,请随意赞赏 或 买杯咖啡 进行支持!

如果你喜欢周刊,请分享给其他需要的同学,让更多人可以从中受益~

🐼欢迎订阅

  • 微信公众号:除更新周刊外,还发布其它原创作品,并转载一些优质文章。(可加好友,可加读者交流群)
  • 博客 及 RSS:我的独立博客,上面有历年原创/翻译的技术文章,以及从 2009 年以来的一些随笔。
  • Github:你可以获取本周刊的 Markdown 源文件,做任何想做的事!
  • 邮件:在 Substack 上开通的频道,满足你通过邮件阅读时事通讯的诉求。
  • Telegram:除了发布周刊的通知外,我将它视为一个“副刊”,补充发布更加丰富的资讯。
  • Twitter:我的关注列表里有大量 Python 相关的开发者与组织的账号。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一下关于word存放代码出现的问题

如下图所示&#xff0c;从 Word 中复制代码并粘贴到其他地方&#xff0c;例如文本编辑器或代码编辑器中&#xff0c;有时会出现额外的连字符或破折号。这是因为 Word 使用了特定的字符编码和格式&#xff0c;而这些字符在代码中可能不被支持或解析为特殊字符。   可见有时从…

Java线程调度以及算法

线程调度概况 Java的线程调度程序是JVM的一部分&#xff0c;它决定应该运行哪个线程。无法保证线程调度程序将选择运行哪个可运行线程。 一次只能有一个线程在一个进程中运行。线程调度程序主要使用抢占式或时间切片调度来调度线程。 抢占式调度与时间分片的区别 在抢占式调…

边缘计算:下一代计算模式的突破

章节一&#xff1a;引言 随着物联网、人工智能和大数据等技术的不断发展&#xff0c;计算需求变得越来越复杂&#xff0c;传统的云计算模式已经难以满足快速增长的数据处理需求。在这样的背景下&#xff0c;边缘计算作为一种全新的计算模式崭露头角&#xff0c;为我们带来了更加…

Pytorch深度学习-----实现神经网络模型在GPU上进行训练的方法

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

css3新增选择器总结

目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 &#xff08;除IE6外的大部分浏览器支持&#xff09; E&#…

数据库设计,理解第二范式和第三范式的区别

在学习数据库范式的时候&#xff0c;很多人搞不清第二范式和第三范式他到底是有啥区别。 想讲清楚第二范式与第三范式的区别&#xff0c;不得不聊到键和相关属性的概念 键和相关属性的概念 范式的定义会使用到主健和候选健&#xff0c;数据库中的健&#xff08;Key)由一个或…

STM32F103C8T6开发笔记1:有线陀螺仪二自由度机械臂

经过之前几天的快速学习&#xff0c;今日尝试组装一款基于MPU6050陀螺仪控制的二自由度机械臂&#xff0c;本文对其使用器材以及基本原理进行介绍~ 组装效果图&#xff1a; 主要元器件如下&#xff1a; 器件个数15 KG以上 舵机3适合舵机的金属夹爪118650电池电源12V1云台支架2…

工博士与纷享销客达成战略合作,开启人工智能领域合作新篇章

近日&#xff0c;工博士与纷享销客在上海正式签署了战略合作协议&#xff0c;正式拉开了双方在人工智能与数字营销领域的合作序幕。这次合作将为双方带来更多机遇和发展空间&#xff0c;并为全球人工智能领域的客户提供更高效、智能的CRM解决方案。 < 双方项目人员合影 >…

React如何配置env环境变量

React版本&#xff1a; "react": "^18.2.0" 1、在package.json平级目录下创建.env文件 2、在‘.env’文件里配置环境变量 【1】PUBLIC_URL 描述&#xff1a;编译时文件的base-href 官方描述&#xff1a; // We use PUBLIC_URL environment variable …

③ vue组件

vue组件创建 在App.vue中添加。 技巧&#xff1a;先import&#xff0c;把vue组件地址写出来。然后在template中写名字。剩下的就自动生成。要看下import有没有多生成什么。 注意1&#xff1a; 注意2&#xff1a; 不只是能在App.vue中引入组件。任意组件中都可以引用其他组件…

msvcp110.dll丢失怎样修复,msvcp110.dll丢失修复方法

msvcp110.dll是Microsoft C库的一部分&#xff0c;它是运行依赖于该库的程序所必需的动态链接库文件。它的作用是提供C运行时库函数的实现&#xff0c;这些函数用于处理程序的内存管理、异常处理、多线程支持等。当系统中缺少或损坏了msvcp110.dll文件时&#xff0c;请及时修复…

STM32--TIM定时器(1)

文章目录 TIM简介定时器类型 通用定时器预分频器时序计数器时序定时中断基本结构TIM内部中断工程TIM外部中断工程 TIM简介 STM32的TIM&#xff08;定时器&#xff09;是一种非常常用的外设&#xff0c;用于实现各种定时和计数功能。它是基于时钟信号进行计数&#xff0c;并在计…

Redis的单线程与多线程

Redis的核心处理逻辑一直都是单线程 有一些分支模块是多线程(某些异步流程从4.0开始用的多线程&#xff0c;例如UNLINK、FLUSHALL ASYNC、FLUSHDB ASYNC等非阻塞的删除操作。网络I/O解包从6.0开始用的是多线程;) 为什么是单线程 多线程多好啊可以利用多核优势 官方给的解释 …

二、编写第一个 Spring MVC 程序

文章目录 一、编写第一个 Spring MVC 程序 一、编写第一个 Spring MVC 程序 代码示例 创建 maven 项目&#xff0c;以此项目为父项目&#xff0c;在父项目的 pom.xml 中导入相关依赖 <dependencies><dependency><groupId>junit</groupId><artifactI…

阿里云ACP知识点

前言&#xff1a;记录ACP错题 1、在创建阿里云ECS时&#xff0c;每台服务器必须要包含_______用来存储操作系统和核心配置。 系统盘&#xff08;不是实例&#xff0c;实例是一个虚拟的计算环境&#xff0c;由CPU、内存、系统盘和运行的操作系统组成&#xff1b;ESC实例作为云…

web基础和tomcat的安装,部署jpress应用

目录 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 【1】定义区别 请求响应信息&#xff0c;发给客户端进行处理&#xff0c;由浏览…

81. 搜索旋转排序数组 II

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a; 解法一&#xff1a;直接从前往后搜索&#xff0c;时间复杂度O(n) AC代码&#xff1a; class Solution {public boolean search(int[] nums, int target)…

在收藏夹里“积灰”的好东西——“收藏从未停止,行动从未开始”

方向一&#xff1a;分享一道你收藏的好题 小雅兰刚学数据结构与算法的时候&#xff0c;学的真的是很吃力&#xff0c;感觉链表真的特别的难&#xff0c;在学习了后面的知识之后&#xff0c;发现链表慢慢变得简单了&#xff0c;若是放在现在&#xff0c;小雅兰仍然觉得链表的知…

JProfiler —CPU评测

当JProfiler测量方法调用的执行时间及其调用堆栈时&#xff0c;我们称之为“CPU评测”。这些数据以多种方式呈现。根据你试图解决的问题&#xff0c;其中一个或另一个演示将是最有帮助的。默认情况下不会记录CPU数据&#xff0c;您必须打开CPU记录才能捕获有趣的用例。 一、调…

密码破解!字典攻击(C/C++代码实现)

字典攻击是一种通过系统地将字典中的每个单词作为密码输入&#xff0c;从而侵入受密码保护的计算机、网络或其他IT资源的方法。字典攻击也可以用于查找解密加密消息或文档所需的密钥。 字典攻击之所以有效&#xff0c;是因为许多计算机用户和企业坚持使用普通单词作为密码。这…