Python之异步编程简谈

Python之异步编程

  • 什么是异步编程?

  • 异步编程中的核心概念是什么?

  • 最简的异步编程实现


什么是异步编程?

  • 异步编程是一种编写非阻塞代码的技术

    • 传统的Python编程

      • 解释器执行完一个def之后才会执行下一个

    • 异步编程

      • 几乎同时执行

      • 几乎同时结束

异步编程的特点:

  • 单线程

  • 多协程

通过协程和事件循环实现伪并发,避免多线程/进程的上下文切换开销

允许程序在等待某些操作完成的时候,执行其他任务

异步编程适用场景
  • I/O密集型操作

    • Web服务器

    • API调用

    • 文件读写

异步编程的核心概念

  • 协程(Coroutime)

  • 事件循环(Event Loop)

  • FutureTask

协程(Coroutime)

  • 通过async def定义的函数称为协程函数

    • 可以在执行过程中通过await挂起,并且释放控制权,在之后运行

  • 协程本身是轻量级函数,不占用线程资源

事件循环(Event Loop)

  • 异步编程的核心调度器,负责管理协程的执行顺序

非阻塞的实现:

  • 不断轮询就绪任务

  • 在协程挂起时切换到其他任务

语法糖:

  • asyncio.run()方法

    • 启动事件循环

  • asyncio.get_event_loop()

    • 管理事件循环

FutureTask

  • Futute:表示一个异步操作结果,由事件循环创建

  • TaskFuture的子类,封装协程,使其可以被事件循环调度

    • 通过asyncio.create_task()方法创建

异步编程最简示例

定义协程函数

import asyncio

async def hello_world(name: str) -> None:
   print(f"Start: Hello, {name}")
   await asyncio.sleep(2)
   print(f"End: Hello, {name}")

创建协程任务

async def main() -> None:
   task1: asyncio.Task = asyncio.create_task(hello_world("你好"))
task2: asyncio.Task = asyncio.create_task(hello_world("世界"))
   
   await task1
   await task2

启动事件循环

asyncio.run(main())
 
posted @ 2025-04-11 18:57  俊king  阅读(29)  评论(0)    收藏  举报