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

Python 异步编程最佳实践

Python 异步编程最佳实践

什么是异步编程?

异步编程是一种编程范式,允许程序同时处理多个任务,而不需要按顺序等待每个任务完成。

同步 vs 异步

同步代码:

importtimedeffetch_data():time.sleep(1)# 模拟耗时操作return"data"result1=fetch_data()# 等待 1 秒result2=fetch_data()# 再等待 1 秒result3=fetch_data()# 再等待 1 秒# 总共耗时 3 秒

异步代码:

importasyncioasyncdeffetch_data():awaitasyncio.sleep(1)# 模拟耗时操作return"data"asyncdefmain():results=awaitasyncio.gather(fetch_data(),fetch_data(),fetch_data())# 总共只耗时 1 秒!asyncio.run(main())

asyncio 核心概念

1. async/await 语法

asyncdefsay_hello():print("Hello")awaitasyncio.sleep(1)print("World")```### 2. 事件循环 (Event Loop)事件循环是异步编程的核心机制: ```python loop=asyncio.get_event_loop()loop.run_until_complete(main())loop.close()

3. Task 对象

Task 用于并发执行多个协程:

task1=asyncio.create_task(fetch_url('url1'))task2=asyncio.create_task(fetch_url('url2'))results=awaitasyncio.gather(task1,task2)

实战案例

案例 1: 批量网页抓取

importaiohttpasyncdeffetch_page(session,url):asyncwithsession.get(url)asresponse:returnawaitresponse.text()asyncdefmain():urls=['url1','url2','url3']asyncwithaiohttp.ClientSession()assession:tasks=[fetch_page(session,url)forurlinurls]results=awaitasyncio.gather(*tasks)```### 案例 2: 定时任务```pythonasyncdefperiodic_task():whileTrue:print("执行任务...")awaitasyncio.sleep(60)# 每分钟执行一次asyncio.run(periodic_task())

常见陷阱

1. 阻塞事件循环

错误示范:

asyncdefbad_example():time.sleep(1)# 这会阻塞整个事件循环!``` ✅**正确做法**:```pythonasyncdefgood_example():awaitasyncio.sleep(1)# 使用异步版本```### 2. 忘记 await```pythonasyncdefmain():task=some_async_function()# ❌ 忘记 await# 应该写成:await some_async_function()```### 3. 异常处理```pythontry:awaitrisky_operation()exceptExceptionase:print(f"出错了:{e}")```## 性能对比|方式|10个请求耗时|100个请求耗时||------|------------|-------------||同步|~10|~100||异步|~1|~1|**效率提升**:**10+**🚀## 最佳实践### 1. 使用异步 HTTP 库-`aiohttp`-异步 HTTP 客户端/服务器--`httpx`-支持同步和异步的 HTTP 客户端### 2. 合理控制并发量```python semaphore=asyncio.Semaphore(10)# 限制最多 10 个并发asyncdeflimited_task(url):asyncwithsemaphore:awaitfetch_url(url)```### 3. 优雅地取消任务```python task=asyncio.create_task(long_running_task())# 稍后取消task.cancel()try:awaittaskexceptasyncio.CancelledError:print("任务已取消")```## 总结掌握 Python 异步编程,让你的程序效率起飞! ✅**适用场景**:-IO 密集型任务(网络请求、文件读写)--需要高并发的应用--实时数据处理 ❌**不适用场景**:-CPU 密集型计算(使用多进程更好)--简单的脚本程序---**学习资源**:-[Python asyncio 官方文档](https://docs.python.org/3/library/asyncio.html)--[Real Python AsyncIO 教程](https://realpython.com/async-io-python/)--[AIOHTTP 文档](https://docs.aiohttp.org/)---*希望本文对你有帮助!欢迎点赞收藏。*
http://www.jsqmd.com/news/480414/

相关文章:

  • 管道病害数据集 管道缺陷分割数据集 DeepLabV3+ 训练代码 (针对管道病害优化)市政管道分割
  • 2026年比较好的床上用品公司推荐:冬季床上用品/全棉床上用品厂家综合实力对比 - 行业平台推荐
  • 2026年靠谱的卷染机厂家推荐:大卷装卷染机实力品牌厂家推荐 - 行业平台推荐
  • 2026年比较好的天丝四件套厂家推荐:棉麻四件套/高档四件套采购指南厂家怎么选 - 行业平台推荐
  • 2026年靠谱的被子品牌推荐:结婚被子/蚕丝被子/纤维被子厂家推荐哪家好 - 行业平台推荐
  • 2026年热门的宝宝枕头品牌推荐:成人枕头/乳胶枕头值得信赖的生产厂家 - 行业平台推荐
  • 2026年口碑好的润滑剂品牌推荐:水基润滑剂精选厂家推荐 - 行业平台推荐
  • 2026年评价高的铝材工厂推荐:2014铝材/6063铝材/硬铝铝材制造厂家哪家靠谱 - 行业平台推荐
  • 2026年优秀的桑蚕丝被厂家推荐:结婚蚕丝被/高档蚕丝被厂家选择指南 - 行业平台推荐
  • 2026年质量好的低温冷却液循环泵品牌推荐:低温冷却液循环泵选型/小型低温冷却液循环泵/高精度低温冷却液循环泵稳定供应商推荐 - 行业平台推荐
  • 2026年口碑好的2017铝板品牌推荐:5A06铝板品牌厂家哪家靠谱 - 行业平台推荐
  • 2026年比较好的碳化硅喷砂机磨料厂家推荐:不锈钢丸喷砂机磨料专业制造厂家推荐 - 行业平台推荐
  • 2026年评价高的环保喷砂机品牌推荐:昆山喷砂机/苏州喷砂机/自动喷砂机实力工厂怎么选 - 行业平台推荐
  • 2026年靠谱的铁路道口公司推荐:铁路道口远程控制/铁路道口视频预警系统实力厂家如何选 - 行业平台推荐
  • 2026年口碑好的皮膜剂品牌推荐:无磷皮膜剂/高分子皮膜剂稳定供应商推荐 - 行业平台推荐
  • 2026年耐用的法式羽绒被公司推荐:双人羽绒被/春秋羽绒被/结婚羽绒被高口碑品牌推荐 - 行业平台推荐
  • 智慧交通-YOLO + DeepSeek 疲劳驾驶智能检测系统 —— 多模态行为识别与风险预警平台 YOLO+DeepSeek+疲劳驾驶检测系统 Pytorch+SpringBoot+Flask+Vu
  • Chrome DevTools MCP 让 AI 无缝接管浏览器调试会话
  • 2026年比较好的电解磷化液工厂推荐:锌系磷化液采购指南厂家怎么选 - 行业平台推荐
  • 2026年质量好的铁路施工工厂推荐:铁路施工工地预警/车辆段铁路施工预警/铁路施工安全预警系统实力工厂怎么选 - 行业平台推荐
  • 2026年值得选择的新型墙体建材工厂推荐:新型墙体建材实力工厂怎么选 - 行业平台推荐
  • 2026年靠谱的陕西电动扫地机品牌推荐:陕西扫地机设备/西安工业扫地机/陕西扫地机产品供应商怎么选 - 行业平台推荐
  • 2026年热门的工厂超声波清洗设备工厂推荐:通过式超声波清洗设备实力厂家如何选 - 行业平台推荐
  • 【含文档+PPT+源码】基于JAVA的企业人事管理系统的设计与实现
  • 2026年口碑好的收银机AI称厂家推荐:收银机电子屏/西安收银机电子称销售厂家 - 行业平台推荐
  • PiliPlus 2.0.1 | 基于Flutter开发的第三方哔哩,目前最好用的一款
  • 2026年比较好的TC70公司推荐:CVC60/40混纺纱/30混纺纱稳定供应商推荐 - 行业平台推荐
  • 2026年比较好的多槽超声波清洗机工厂推荐:铜件超声波清洗机优质供应商推荐 - 行业平台推荐
  • 2026年口碑好的石英品牌推荐:石英管/光伏石英玻璃优质供应商推荐 - 行业平台推荐
  • Musify10.0.0 | 纯净无广免费音乐软件, 畅听国内外歌曲,需要特殊网络