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

Python学习(12) ----- Python的异步操作


🧠 1. 先理解:什么是“同步”和“异步”

举个生活中的例子👇

同步(synchronous)

你去煮泡面:

  1. 烧水 → 等水开
  2. 放面 → 等面煮熟
  3. 吃面

每一步都要“等前一步完成”才能继续。
所以整个过程花的时间 = 烧水时间 + 煮面时间。


异步(asynchronous)

你更聪明一点 😎:

  1. 开水壶烧水 🔥
  2. 在水还没开的时候,顺便切点菜、看个视频 🎬
  3. 水开时“提醒你”,再去放面

异步的意思就是:不用一直等一个任务做完,能在等待的同时去干别的事


⚙️ 2. 在程序里这是什么意思?

在代码里,“异步”通常用来等待一些耗时的操作,比如:

  • 网络请求(下载网页、发 HTTP 请求)
  • 文件读写
  • 数据库查询

这些操作不是 CPU 运算慢,而是IO(输入输出)慢
Python 的异步操作就是在这些“等待IO”的时候,让程序能先去做别的事。


🐍 3. Python异步的语法:async + await

最核心的两个关键词:

  • async:声明一个异步函数
  • await:在里面等待一个异步操作完成
import asyncioasync def cook_noodles():print("开始烧水...")await asyncio.sleep(3)  # 模拟耗时3秒print("水开了,放面!")await asyncio.sleep(2)print("面煮好了!")async def main():await cook_noodles()asyncio.run(main())

输出:

开始烧水...
(3秒后)
水开了,放面!
(2秒后)
面煮好了!

这和同步差不多,只是语法变了——还没有体现异步的优势。


⚡ 4. 真正的异步:多个任务同时进行

import asyncioasync def cook_noodles():print("烧水中...")await asyncio.sleep(3)print("面好了!")async def watch_video():print("看视频中...")await asyncio.sleep(2)print("视频看完!")async def main():await asyncio.gather(cook_noodles(),watch_video())asyncio.run(main())

输出(几乎同时开始):

烧水中...
看视频中...
(2秒后)
视频看完!
(3秒后)
面好了!

💡 你会发现:

  • “烧水”没耽误“看视频”
  • 整个程序总耗时只有 3 秒,而不是 5 秒

这就是异步的威力。


📦 5. 小结

概念同步异步
执行方式一步接一步可以并发执行
典型用途普通逻辑、CPU密集网络请求、IO操作
Python关键字async / await
核心库asyncio

✅ 一句话总结

Python 的异步操作让程序在“等待”的时候也能去干别的事,从而更高效地利用时间。



🧩 1. 定义异步函数:async def

普通函数这样写:

def say_hello():print("Hello")

异步函数这样写:

async def say_hello():print("Hello")

区别:

  • 加了 async 的函数不会立刻执行,而是返回一个 协程对象(coroutine)
  • 要执行它,必须 await 它,或者交给事件循环去跑。

🧠 2. 如何运行异步函数

✅ 方式 1:asyncio.run()

这是最常用也最简单的写法。

import asyncioasync def say_hello():print("Hello, Async!")async def main():await say_hello()asyncio.run(main())

解释:

  • asyncio.run(main()) 会启动一个事件循环
  • 在里面运行 main() 协程
  • main() 里面再 await 其他异步函数

⚙️ 3. await 的作用

在异步函数内部,你可以用 await 来“等待”另一个异步操作的完成。

import asyncioasync def slow_task():print("Start task")await asyncio.sleep(2)  # 模拟耗时操作print("Task done")async def main():print("Before await")await slow_task()print("After await")asyncio.run(main())

输出:

Before await
Start task
(2秒后)
Task done
After await

这里的 await asyncio.sleep(2) 就相当于在等待一个耗时操作。
但等待时 Python 可以去执行别的异步任务(这就是“并发”的关键)。


⚡ 4. 同时运行多个异步任务:asyncio.gather

import asyncioasync def download(name, delay):print(f"{name} start")await asyncio.sleep(delay)print(f"{name} done")async def main():await asyncio.gather(download("A", 3),download("B", 2),download("C", 1))asyncio.run(main())

输出(顺序体现了异步执行):

A start
B start
C start
C done
B done
A done

✅ 三个任务几乎同时开始
✅ 整体执行时间 ≈ 最慢的任务(3秒)
而不是 3+2+1 = 6 秒。


🚀 5. 如果要循环创建多个异步任务?

可以用 create_task()

import asyncioasync def worker(id):print(f"Worker {id} start")await asyncio.sleep(2)print(f"Worker {id} done")async def main():tasks = []for i in range(5):task = asyncio.create_task(worker(i))tasks.append(task)await asyncio.gather(*tasks)asyncio.run(main())

输出:

Worker 0 start
Worker 1 start
Worker 2 start
Worker 3 start
Worker 4 start
(2秒后)
Worker 0 done
Worker 1 done
Worker 2 done
Worker 3 done
Worker 4 done

👉 所有任务同时执行,非常高效。


📦 6. 异步函数常用于哪些场景?

场景示例库说明
网络请求aiohttp异步版的 requests
文件IOaiofiles异步读写文件
数据库操作asyncpg, databases异步访问 PostgreSQL 等
Web框架FastAPI, aiohttp.web异步 Web 服务

✅ 7. 小结

关键点说明
async def定义异步函数
await等待一个异步操作完成
asyncio.run()启动事件循环并运行主协程
asyncio.gather()并发执行多个协程
asyncio.create_task()创建并启动协程任务

http://www.dtcms.com/a/542428.html

相关文章:

  • 什么腾讯网站做任务能刷q币百度搜索网站优化
  • 哈尔滨网站建设效果广州市建设集团网站首页
  • 平顶山网站开发wordpress程序 耗内存
  • 诸暨网站制作asia 域名 知名网站
  • python做直播网站网络推广公司招聘
  • 程序源代码网站建设一个招聘网站大概多少费用
  • elasticSearch之API:建议器(suggest)
  • 温州网站建设wmwl网站设计制作过程
  • 建设品牌型网站网站整体规划
  • 沈阳网站推广运营公司百度推广怎么做步骤
  • 网站免费大全wordpress 谷歌
  • Vite信息泄露 | CVE-2025-46565 复现研究
  • 将火山云TOS存储桶挂载到Linux服务器
  • 网站模板上传什么网站可以做数据调查
  • MongoDB数据库
  • 每天学英语(一)积极向上科技——东方仙盟炼气期
  • 织梦网站上传路径不对揭阳网站设计制作
  • 外贸网站建设 杭州网站建设都包括哪些方面
  • iis网站属性没有asp.net静态页面是什么意思
  • C++ 模板进阶
  • 怎么设置网站栏目百度推广营销
  • 国产MCU芯片在船舶压力传感器中的应用探索与实践
  • 关于网站建设的软文做球球棒棒糖网站源码
  • 网站开发教程pdf网络销售
  • 网站图片上传却不显示不出来亳州网站网站建设
  • 工商网站备案办法深圳 网站托管
  • 【元器件专题】电容核心知识-无极性电容(二)
  • progen2 docker镜像打包命令文档
  • 陇南市城乡建设局网站佛山网站建设 合优
  • 门户网站推广方案台州品牌设计公司