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

python 异步调用语法

异步编程是一种高效的并发编程范式,特别适用于 I/O 密集型的应用(如网络请求、文件读写、数据库操作等)。它的核心思想是:当遇到需要等待的操作时,不是让程序“干等”,而是暂停当前任务,去执行其他可以立即运行的任务,等到那个等待的操作完成后,再回来继续执行。

 

1. 核心概念与关键字

async - 定义异步函数

  • 在 def 关键字前加上 async,这个函数就变成了一个“异步函数”或“协程函数”。

  • 调用异步函数时,它会立即返回一个协程对象,但函数体内的代码并不会立即执行。

  • 异步函数内部可以使用 await 关键字。

async def my_async_function():return "Hello, Async World!"# 调用它不会直接执行,而是返回一个协程对象
coroutine = my_async_function()
print(coroutine) # 输出:<coroutine object my_async_function at 0x...>

await - 等待异步操作完成

  • await 后面必须跟一个可等待对象,最常见的就是另一个协程。

  • 当执行到 await 时,当前协程会暂停,并将控制权交还给事件循环。事件循环会去执行其他任务。

  • 直到 await 后面的操作完成,事件循环才会在适当的时候回来,从这个 await 之后的地方继续执行当前协程。

  • await 只能在 async 定义的函数内部使用。

async def say_after(delay, what):await asyncio.sleep(delay) # 模拟一个耗时的I/O操作print(what)async def main():print("Started")await say_after(1, 'Hello') # 等待这个协程完成await say_after(1, 'World') # 再等待这个协程完成print("Finished")

2. 事件循环 - 异步引擎

事件循环是异步编程的“心脏”。它负责管理和调度所有协程,当某个协程因 await 而暂停时,事件循环就去找另一个可以运行的协程来执行。

在大多数情况下,你不需要直接操作事件循环,asyncio.run() 会帮你管理。

import asyncioasync def main():# ... 你的异步代码 ...# 这是运行异步程序的推荐方式(Python 3.7+)
asyncio.run(main())

asyncio.run() 负责创建一个新的事件循环,运行你的主协程,并在完成后关闭循环。

3. 并发执行任务

异步的强大之处在于并发。我们可以创建多个任务,让它们在事件循环中并发执行。

asyncio.create_task()

  • 它接受一个协程,并将其“封装”成一个 Task 对象,并立即排入事件循环等待执行。

  • Task 是 Future 的子类,代表一个“正在进行中”的计算。

import asyncioasync def say_after(delay, what):await asyncio.sleep(delay)print(what)async def main():# 创建两个任务,它们会并发执行task1 = asyncio.create_task(say_after(1, 'Hello'))task2 = asyncio.create_task(say_after(1, 'World'))print("Started")# 等待两个任务都完成await task1await task2print("Finished") # 总共耗时约1秒,而不是2秒asyncio.run(main())

输出:
Started
(等待约1秒后)
Hello
World
Finished

asyncio.gather()

  • 用于并发运行多个可等待对象,并收集它们的结果。

  • 它返回一个包含所有结果的列表(顺序与传入顺序一致)。

import asyncioasync def fetch_data(id, delay):print(f"Task {id} started")await asyncio.sleep(delay)print(f"Task {id} finished")return f"Data from {id}"async def main():# 并发执行三个任务,并等待它们全部完成results = await asyncio.gather(fetch_data(1, 2),fetch_data(2, 1), # 这个先完成fetch_data(3, 3),)print("All tasks done:", results)asyncio.run(main())

输出:

Task 1 started
Task 2 started
Task 3 started
Task 2 finished
Task 1 finished
Task 3 finished
All tasks done: ['Data from 1', 'Data from 2', 'Data from 3']

4. 可等待对象

在 Python 异步中,有三种主要类型的对象可以在 await 表达式中使用:

  1. 协程:由 async def 定义的函数返回的对象。

  2. Task:由 asyncio.create_task() 等函数创建,用于并发调度协程。

  3. Future:一个低层次的、代表异步操作最终结果的对象。Task 是 Future 的子类。通常我们不需要直接创建 Future

 

 

总结

 
概念/语法作用
async def 定义一个异步函数(协程)
await 暂停当前协程,等待一个异步操作完成
asyncio.run() 运行主异步函数(管理事件循环)
asyncio.create_task() 将协程包装成任务,并发执行
asyncio.gather() 并发运行多个任务并收集结果
asyncio.sleep() 异步的等待(替代 time.sleep)
事件循环 异步程序的调度中心

 

http://www.hskmm.com/?act=detail&tid=37523

相关文章:

  • KAPE 0.8.3.0发布:数字取证工具新版本详解
  • 第一!天翼云引领中国教育公有云市场
  • 哇哦杯题解民间版
  • 海上60公里,5G信号满格?这款神器让远航不再“失联”
  • 2025除尘设备/脉冲除尘器厂家推荐东莞市百谊环保科技,专业高效净化解决方案
  • 2025 年压滤机厂家最新推荐排行榜:隔膜 / 污泥 / 真空 / 板框 / 带式压滤机优质品牌权威指南
  • 2025发电机/发电机组/柴油发电机/甲醇发电机组租赁厂家推荐新疆泓浩机电,专业维修保养服务保障
  • 2025 年氮化硅陶瓷球生产厂家最新推荐榜:高精度高耐磨产品优选,国内优质企业全面剖析
  • 阿里云加持,《泡姆泡姆》让全球玩家畅享零延迟冒险
  • 基于粒子群优化(PSO)算法的PID控制器参数整定
  • VScodeC语言结构体成员提示不全
  • 2025滑石粉厂家推荐辽宁精华新材料,纳米级/工业级/化妆品级多品类覆盖
  • 上海结申管件制造有限公司:承插焊异径三通、承插焊Y型三通、高压承插管件、锻造承插三通源头厂家
  • 承插焊异径三通源头厂家推荐上海结申,专业制造高压承插管件
  • 【10.29 直播】IoTDB 图形化工具与编程框架集成实操
  • 锻造承插三通厂家专业技术对比,上海结申管件承压性能提升28%使用寿命延长35%
  • 2025棒球帽/卫衣/羽绒服品牌推荐,COVERNAT潮流服饰厂家精选
  • Windows 命令行查看COM口
  • harbor基于自建证书部署HTTPS及k8s集群
  • python练习 石头剪刀布
  • 基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
  • 【IEEE出版】第六届计算机通信与网络安全国际学术会议(CCNS 2025)
  • 2025 年最新推荐编织袋源头厂家排行榜:聚焦全自动智能节能设备,助力企业选对优质厂商工业 / 数控 / 重型 / 多功能 / 自动编织袋设备推荐
  • 2025年专业的上海Micro-LED显示屏推荐TOP生产厂家
  • 2025年质量好的工业不锈钢链轮最新TOP厂家推荐
  • 2025年正规的广州智能洗碗机,广州洗碗机设备厂家最新推荐榜
  • 改进的(μ+λ)约束差分进化算法设计与实现
  • 2025年10月旋转接头厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025连接器厂家推荐皓富电子,专注USB/电池/TYPE-C/防水接口专业制造
  • 2025耳机/DC/防水耳机插座厂家推荐皓富电子,专业品质保障