乐于分享
好东西不私藏

漫画图解fastapi微服务框架:方老师带你3分钟学会FastAPI中的async/await用法,快速入门异步编程

漫画图解fastapi微服务框架:方老师带你3分钟学会FastAPI中的async/await用法,快速入门异步编程

#python#FastApi#web编程#异步编程#职业教育#编程小白入门
预计阅读时间: 3分钟

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.asyncio import AsyncSession@app.get('/users/{user_id}')async def get_user(user_id: int,       db: AsyncSession):           # 异步查询数据库       user = await db.get(User, user_id)# 异步调用外部API    async 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)      # 使用异步版本的sleep        return {'message''done'}

2. 数据库要用异步驱动

使用SQLAlchemy 1.4+的异步版本:

from sqlalchemy.ext.asyncio import       create_async_engine, AsyncSession      # 使用异步数据库驱动(如asyncpg)      engine = create_async_engine(            'postgresql+asyncpg://user:pass@localhost/db')

写在最后

FastAPI让Python异步编程变得前所未有的简单。记住三点:

    刚开始可能不习惯,但写多了就会发现:这才是现代Python后端该有的样子!

    如果你觉得这篇文章有帮助,欢迎点赞、推荐和转发 ,让更多初学者看到。有任何问题也可以在评论区留言,方老师会一一回复解答!

    🤝 互动环节

    💬 你在学习 FastAPI 时遇到过什么问题?

    欢迎在评论区分享你的学习经验和遇到的问题!

    会了吗,看到这里的同学们可以在评论区打卡,一起努力。
    我们下一个教程:微服务开发方法-依赖注入初步
    本次系列教程都是基于下面这本书开展的,有需要的可以看看(京东同价)

    🎯 总结

    方老师说

    python web编程其实不难,使用好框架很重要。之前有django,flask,现在也比较流行这个:fastapi,一个相比较其他而言,以速度著称的。
    想自己做点东西的,不妨跟着学。觉得好的,也可以多推荐多点赞。有能力的也可以赞赏一二。
    记住:编程的路上没有捷径,但有好的工具和方法可以让你走得更快

    💬 记住

    1. 定义函数时加 async —— 声明异步处理
    2. 调用函数时加 await —— 不阻塞事件循环
    3. 用异步版本的库 —— 数据库、HTTP客户端等
            往期精彩文章回顾:
            漫画图解fastapi微服务框架:进入Web编程世界的前期准备
            漫画图解fastapi微服务框架:手搓人生第一个web网站,“Fastapi,欢迎你”(附图解+代码)
            漫画图解fastapi微服务框架:初始RestAPI的不同http请求方式(附图解+代码)
            漫画图解FastApi微服务框架教程:磨刀不误砍柴工,跟哆啦一起来安装miniconda虚拟环境

            ————☀本文完结☀————

            关注点赞👍,好运不断!点个爱心❤️事事顺心!😊

            欢迎关注!我们一起成长!

            作者简介方老师,资深信息技术从业者,有接近30年的技术从业经验,擅长用简单易懂的方式讲解复杂的技术问题,希望能帮助大家解决问题。

            本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 漫画图解fastapi微服务框架:方老师带你3分钟学会FastAPI中的async/await用法,快速入门异步编程

            猜你喜欢

            • 暂无文章