Python异步编程优雅实践

news/2025/3/12 12:29:05/

在这里插入图片描述
Python 异步编程是现代高效开发的重要技能,尤其在处理 I/O 密集型任务(如网络请求、文件操作)时表现出色。本文将从基础概念入手,逐步深入到高级实践,帮助读者掌握 asyncio 和 aiohttp 等核心工具,最终实现优雅的异步代码设计。无论您是初学者还是有一定经验的开发者,都能从中受益。

1. 什么是异步编程?

  • 同步 vs 异步
python"># 同步代码示例
import timedef task(name):print(f"Task {name} started.")time.sleep(2)  # 模拟耗时操作print(f"Task {name} finished.")task("A")
task("B")
输出:Task A started.
Task A finished.
Task B started.
Task B finished.
python"># 异步
async def say_hello():print("Hello")await asyncio.sleep(1)  # 模拟异步操作print("World")# 运行协程
import asyncio
asyncio.run(say_hello())

2. Python 异步编程的核心概念

  • 协程 (Coroutine)
    定义:协程是一种可以暂停和恢复执行的函数。
    使用 async def 定义协程函数。
  • 事件循环是异步编程的核心,负责调度协程。
    示例:如何使用 asyncio.run() 启动事件循环。
  • await 关键字
    用于等待一个异步操作完成。
    注意事项:只能在 async 函数中使用。

3. asyncio 基础用法

python">async def task_a():print("Task A started")await asyncio.sleep(2)print("Task A finished")async def task_b():print("Task B started")await asyncio.sleep(1)print("Task B finished")async def main():task1 = asyncio.create_task(task_a())task2 = asyncio.create_task(task_b())await task1await task2asyncio.run(main())
# asyncio.create_task() 创建并发任务。
# syncio.gather():并行运行多个协程。
# asyncio.wait():更灵活的任务管理。
python">#  aiohttp:异步 HTTP 请求
import aiohttp
import asyncioasync def fetch(session, url):async with session.get(url) as response:return await response.text()async def main():urls = ["https://example.com","https://httpbin.org/get",]async with aiohttp.ClientSession() as session:tasks = [fetch(session, url) for url in urls]results = await asyncio.gather(*tasks)for i, result in enumerate(results):print(f"Result from URL {i+1}: {len(result)} bytes")asyncio.run(main())

http://www.ppmy.cn/news/1573080.html

相关文章

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…

XX食品有限公司智能制造汇报材料(71页PPT)

该文档是XX食品有限公司的智能制造汇报材料,内容涵盖行业背景及竞争对手分析、公司智能制造现状和规划方案。报告指出,食品工业在“一带一路”战略下大市场趋势显著,且国家品牌战略推进使品牌文化热情高涨。同时,婴幼儿、青少年、…

12苍穹外卖之工作台(Apache POI、Excel)

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现:工作台、数据导出 工作台效果图: 数据导出效果图: 在数据统计页面点击数据导出:生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运…

SQL Server 导入Excel数据

1、选中指定要导入到哪个数据库,右键选择 》任务 》导入数据 2、数据源 选择Excel,点击 下一步(Next) 3、目前 选择OLE DB Provider ,点击 下一步(Next) 4、默认 ,点击 下一步(Next)…

【16届蓝桥杯寒假刷题营】第1期DAY4

4.可达岛屿的个数 - 蓝桥云课 题目背景 在一个神奇的魔法世界中,有一座古老的迷幻之城。迷幻之城被分成 n 个鸟屿,编号从 1 到 n,共有 m 座桥。迷幻之城的居民们希望能够建立起紧密的联系,每个岛屿上的居民都想知道自己最多能到…

16-使用QtChart创建动态图表:入门指南

QtChart是Qt框架中的一个强大模块,用于创建各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项,使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图&#xff…

使用 HTML CSS 和 JAVASCRIPT 的黑洞动画

使用 HTML CSS 和 JAVASCRIPT 的黑洞动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Black Ho…

记录阿里云CDN配置

网站接入CDN全流程&#xff0c;共4步&#xff01;-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点&#xff1a; 1. 域名和泛域名区别 2.开启https,要用nginx的证书&#xff0c;和项…