当前位置: 首页 > news >正文

Python Async 编程快速入门 | 超简明异步协程指南

async 是 Python 用于 异步编程(asynchronous programming) 的语法关键字。

它主要用于 提升程序执行效率,尤其在执行 I/O 密集型任务(如网络请求、数据库查询、文件读写)时,可以在等待的同时做别的事。


一、为什么要用 Async?(异步的意义)

在编写程序时,我们经常遇到这样的情况:
• 向服务器请求数据,需要等待
• 访问数据库,速度慢
• 下载文件或爬虫抓取,等待时间长

传统的同步程序会 阻塞当前线程,比如这样:

def get_data():time.sleep(3)print("数据到手!")

👉 那么在这3秒内,程序 啥也干不了。

异步编程就像是:先下单,等快递的过程中干点别的事!

一句话理解

async def func(): ...

表示:这个函数是“异步函数”,运行它不会立刻执行,而是返回一个协程对象(coroutine),需要 await 来真正运行它。


二、核心语法:只需记住两个关键词

1. async def 定义异步函数

async def say_hello():...
  • 这不是普通函数,而是 协程函数(Coroutine Function)
  • 调用它不会立刻执行,而是返回一个协程对象

2. await 调用其他协程

await say_hello()
  • 只能在 async 函数中使用 await
  • 让出控制权,等待这个任务完成再继续

三、快速示例:Hello Asyncio

import asyncioasync def say_hello():print("Hello")await asyncio.sleep(1)  # 模拟等待1秒print("World")# 启动 async 函数
asyncio.run(say_hello())

输出:

Hello
(等待1秒)
World

你看,程序并没有卡死,而是 在等待中还能处理其他异步任务!


四、多任务同时运行


import asyncioasync def task(name, delay):print(f"{name} 开始")await asyncio.sleep(delay)print(f"{name} 结束")async def main():await asyncio.gather(task("任务A", 2),task("任务B", 1))asyncio.run(main())

输出顺序:

任务A 开始
任务B 开始
任务B 结束
任务A 结束

✔️ 多个任务并发运行了,时间效率提高了!


五、应用场景有哪些?

  1. 🔁 爬虫:多个网页同时抓取
  2. 🧠 大模型:异步调用 API
  3. 🗂️ 文件处理:边下载边处理
  4. 💬 Chatbot:用户对话响应不卡顿
  5. 🌐 Web 框架:FastAPI 就是 async 驱动

六、常见搭配

  1. async def:定义一个异步函数
  2. await:让你可以等待另一个协程
  3. asyncio.run(…):是启动协程的入口

七、延伸阅读 & 推荐工具

  • 官方文档:https://docs.python.org/zh-cn/3/library/asyncio.html
  • 三方库支持:
    • aiohttp:异步 HTTP 客户端
    • FastAPI:基于 async 的高性能 Web 框架
    • aiomysql、aioredis:异步数据库驱动

异步编程一开始看起来有点拗口,但只要掌握 async 和 await,很多 I/O 密集型任务就能大大提速!

如果你有任何问题,欢迎评论区交流 👇👇👇

http://www.lryc.cn/news/576123.html

相关文章:

  • java代码规范
  • 自动化保护 AWS ECS Fargate 服务:使用 Prisma Cloud 实现容器安全
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-116节(封装)
  • 鸿蒙HarmonyOS 5小游戏实践:记忆翻牌(附:源代码)
  • DHT11 STM32 HAL驱动库 整数
  • .NetCore+Vue快速生产框架开发详细方案
  • Chrome浏览器访问https提示“您的连接不是私密连接”问题解决方案
  • 已对接Shopee、Lazada、亚马逊等知名海外电商平台!商派DigiOS-OMS业务中台助力品牌扩展全球业务
  • 《Opto-Electronic Advances》热点论文速览(2025)
  • linux中python虚拟环境和版本的选择
  • 【Linux手册】进程终止:进程退出和信号的响应机制
  • VB.NET,C#字典对象来保存用户数据,支持大小写
  • Selenium 多窗口截图(窗口切换)二次封装方法详解 —— Python 实践
  • 【Python】实现对LGBT+ rights worldwide (2025)数据集的可视化展示
  • MySQL在C中常用的API接口
  • TiDB AUTO_RANDOM 超大主键前端精度丢失排查:JavaScript Number 限制与解决方案
  • 玩转Linux CAN/CAN FD—SocketCAN的使用
  • opensuse安装rabbitmq
  • 【编译原理】期末复习知识总结
  • 【大数据】大数据产品基础篇
  • 【开源项目】「安卓原生3D开源渲染引擎」:Sceneform‑EQR
  • ArcGIS Pro利用擦除工具,矢量要素消除另一矢量部分区域
  • 【网络安全】密码学知识普及
  • 高可用与低成本兼得:全面解析 TDengine 时序数据库双活与双副本
  • OkHttp 简单配置
  • pandas---使用教程
  • 解构SAP RISE与Cloud ERP授权新政:从许可模式到迁移策略的深度指南
  • (一)miniconda安装配置
  • Dubbo服务调用超时问题解决方案
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试