FastAPI 凭借 Starlette/ASGI 的异步内核与 Pydantic 的类型体系,成为当下 Python Web 开发的高性能代名词。但"异步框架"并不等于"自动变快"——我在多个生产项目中见过同一套代码在压测下从"宣称的几万 QPS"掉到几百,原因几乎都集中在三类:异步路由里混入了同步阻塞调用、依赖注入被滥用成"隐藏的同步耗时点"、以及部署层连接池与进程模型配置错误。本文不重复官方文档的 API 介绍,而是以真实生产事故为线索,把调优思路、参数依据和排查方法讲透。
2025/4/19大约 9 分钟
写异步 Python 的人很多,真正把事件循环、Future/Task、async/await 的底层机制搞清楚的人却不多。多数人停留在「加个 async def、用 await 调用」的层面,一旦遇到「为什么我的协程没并发」「为什么 Task 泄漏」「为什么 uvloop 反而更慢」这类问题就束手无策。本文从事件循环的调度本质讲起,一直讲到 uvloop 与 aiohttp 在生产环境的高并发实践,力求把每个结论都落到可运行、可验证的代码与参数上。
一、事件循环:单线程里的「协作式调度器」
asyncio 的核心是一个事件循环(Event Loop)。它本质上是一个运行在单线程里的协作式调度器,通过 select/epoll/kqueue 等 I/O 多路复用机制,在一个线程内同时「监听」成千上万个 socket。
2025/2/15大约 8 分钟
CompletableFuture 自 Java 8 引入以来,几乎成了 Java 异步编程的事实标准。但"会用"和"用对"之间隔着一条巨大的鸿沟:串并联编排失控导致的响应时间劣化、异常被静默吞掉导致的偶发丢单、超时不生效导致的线程堆积、以及默认 ForkJoinPool 在 IO 密集型场景下的集体翻车,都是生产环境里反复出现的真实事故。本文不重复"CompletableFuture 是什么"的入门教程,而是从工程落地视角,拆解编排、异常、超时、线程池隔离四类高频问题,并给出可直接落地的代码与调参建议。
一、为什么你的 CompletableFuture 变慢了:先看清默认线程池
2022/5/28大约 9 分钟