Python之异步编程简谈
什么是异步编程?
异步编程中的核心概念是什么?
什么是异步编程?
-
异步编程是一种编写非阻塞代码的技术
-
传统的
Python编程-
解释器执行完一个
def之后才会执行下一个
-
-
异步编程
-
几乎同时执行
-
几乎同时结束
-
-
异步编程的特点:
-
单线程
-
多协程
通过协程和事件循环实现伪并发,避免多线程/进程的上下文切换开销
允许程序在等待某些操作完成的时候,执行其他任务
异步编程适用场景
-
I/O密集型操作-
Web服务器 -
API调用 -
文件读写
-
异步编程的核心概念
-
协程(
Coroutime) -
事件循环(
Event Loop) -
Future和Task
协程(Coroutime)
-
通过
async def定义的函数称为协程函数-
可以在执行过程中通过
await挂起,并且释放控制权,在之后运行
-
-
协程本身是轻量级函数,不占用线程资源
事件循环(Event Loop)
-
异步编程的核心调度器,负责管理协程的执行顺序
非阻塞的实现:
-
不断轮询
就绪任务 -
在协程挂起时切换到其他任务
语法糖:
-
asyncio.run()方法-
启动事件循环
-
-
asyncio.get_event_loop()-
管理事件循环
-
Future和Task
-
Futute:表示一个异步操作结果,由事件循环创建 -
Task:Future的子类,封装协程,使其可以被事件循环调度-
通过
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())
It's a lonely road!!!

浙公网安备 33010602011771号