漫画图解fastapi微服务框架:方老师带你3分钟学会FastAPI中的async/await用法,快速入门异步编程
10年青少年编程教育经验 | 资深Python专家
前大厂技术总监 | 现编程教育创业者
专注青少年编程教育技能提升
今日主题
方老师将带你开始Fastapi微服务的开发之旅,今天初步介绍一下异步编程-async/await关键词。
本系列是基于《利用FastAPI构建Python微服务》这本书的教程,需要原书的可看一下文后的传送链接。

机器猫带小明开始新的web开发之旅

异步编程大家都有所耳闻,那么在Fastapi框架下会是什么样子的呢?
这也用到async和await这对组合。那具体是什么样?今天方老师用3分钟试试讲清楚这个知识点。
一、为什么FastAPI要搞原生异步?
一些传统的Python Web框架(比如Flask)原生是同步的,要实现异步需要借助外部的异步框架(比如Flask-SocketIO):
@app.route('/items')def get_items():data = fetch_from_database()# 等待数据库返回,CPU干等着return jsonify(data)
问题是:当请求量大时,服务器资源就会被阻塞,导致性能上不去。
FastAPI从一开始就原生支持异步,所以可以这样写:
@app.get('/items')async def get_items():data = await fetch_from_database()# 等待时CPU可以去处理其他请求return data
在这个架构下,同样的硬件,FastAPI能处理更多并发请求。这就是异步的威力。
二、async/await基础用法
1. 声明异步函数
在FastAPI中,声明异步路由很简单,只需在函数定义前加async:
from fastapi import FastAPIapp = FastAPI()@app.get('/')async def root():return {'message':'Hello World'}@app.post('/users')async def create_user(user:UserCreate):# 异步处理用户创建return await save_user(user)
2. 使用await调用异步函数
要调用异步函数,其实很简单,只需要用await:
import httpxfrom sqlalchemy.ext.asyncioimport AsyncSession@app.get('/users/{user_id}')async def get_user(user_id: int,db: AsyncSession):# 异步查询数据库user = await db.get(User, user_id)# 异步调用外部APIasync with httpx.AsyncClient() as client:response = await client.get(f'https://api.example.com/users/{user_id}')return {'user': user,'external_data': response.json()}
关键点:await只能用在使用了async关键字的函数。
3. 并发执行多个任务(进阶)
有时候需要同时做几件事,可以用 asyncio.gather:
import asyncio@app.get('/dashboard')async def get_dashboard():# 同时发起三个查询,等全部完成user_count, order_count,revenue = await asyncio.gather(get_user_count(),get_order_count(),get_revenue())return {'users': user_count,'orders': order_count,'revenue': revenue}
这样比一个个调用await快多了!
⚡ 初学者常见痛点及解决方案
1. 不要混用同步和异步代码
❌ 错误示范:
@app.get('/wrong')async def wrong():# 同步阻塞操作会卡住整个事件循环time.sleep(5)# 千万别这样!return {'message': 'done'}
因为 sleep函数是同步,会等待 5秒。
✅ 正确做法:
import asyncio@app.get('/correct')async def correct():await asyncio.sleep(5)# 使用异步版本的sleepreturn {'message': 'done'}
2. 数据库要用异步驱动
使用SQLAlchemy 1.4+的异步版本:
from sqlalchemy.ext.asyncio importcreate_async_engine, AsyncSession# 使用异步数据库驱动(如asyncpg)engine = create_async_engine('postgresql+asyncpg://user:pass@localhost/db')
写在最后
FastAPI让Python异步编程变得前所未有的简单。记住三点:

刚开始可能不习惯,但写多了就会发现:这才是现代Python后端该有的样子!
如果你觉得这篇文章有帮助,欢迎点赞、推荐和转发 ,让更多初学者看到。有任何问题也可以在评论区留言,方老师会一一回复解答!
🤝 互动环节
💬 你在学习 FastAPI 时遇到过什么问题?
欢迎在评论区分享你的学习经验和遇到的问题!
🎯 总结:
方老师说
💬 记住:
-
定义函数时加 async —— 声明异步处理 -
调用函数时加 await —— 不阻塞事件循环 -
用异步版本的库 —— 数据库、HTTP客户端等
————☀本文完结☀————
欢迎关注!我们一起成长!
作者简介:方老师,资深信息技术从业者,有接近30年的技术从业经验,擅长用简单易懂的方式讲解复杂的技术问题,希望能帮助大家解决问题。
夜雨聆风