Python 中的异步编程:Asyncio
创始人
2024-12-03 06:03:16
Python 的 asyncio 库提供了一个用于异步编程的框架,允许开发者通过协程实现并发操作,提高程序执行效率。它支持事件循环、任务调度和异步I/O操作,适用于编写高性能的网络应用和I/O密集型服务。

Python中的异步编程是一种编程模式,它允许程序在等待某些操作完成时继续执行其他任务,Asyncio是Python中的一个库,用于编写并发代码,使用async/await语法。

Python 中的异步编程:Asyncio(图片来源网络,侵删)

以下是关于Python中异步编程的一些重要概念和用法:

1、协程(Coroutines)

协程是一种可以暂停和恢复执行的函数,它们使用async def定义,并使用await关键字来调用其他协程或异步操作。

 import asyncio async def my_coroutine():     print("Hello")     await asyncio.sleep(1)     print("World") async def main():     await my_coroutine() asyncio.run(main())

2、事件循环(Event Loop)

事件循环是异步编程的核心组件,它负责调度和执行协程,可以使用asyncio.get_event_loop()获取当前事件循环,或者使用asyncio.run()自动创建一个新的事件循环。

 import asyncio async def my_coroutine():     print("Hello")     await asyncio.sleep(1)     print("World") loop = asyncio.get_event_loop() loop.run_until_complete(my_coroutine()) loop.close()

3、Futures 和 Tasks

Futures 和 Tasks 是异步编程中用于表示尚未完成的计算结果的对象,Tasks 是一种特殊的Futures,它们包装协程并在事件循环中执行,可以使用asyncio.ensure_future()将协程转换为Task,或者使用asyncio.create_task()直接创建Task。

Python 中的异步编程:Asyncio(图片来源网络,侵删)
 import asyncio async def my_coroutine():     print("Hello")     await asyncio.sleep(1)     print("World") async def main():     task = asyncio.create_task(my_coroutine())     await task asyncio.run(main())

4、并发和并行

并发是指同时执行多个任务,但不一定在同一时刻执行,并行是指同时执行多个任务,并且在同一时刻执行,在Python中,可以使用asyncio库实现并发和部分并行。

 import asyncio async def my_coroutine(n):     print(f"Start {n}")     await asyncio.sleep(1)     print(f"End {n}") async def main():     tasks = [asyncio.create_task(my_coroutine(i)) for i in range(5)]     await asyncio.gather(*tasks) asyncio.run(main())

5、异步I/O操作

异步I/O操作是指在等待I/O操作完成时不阻塞程序执行的操作,Python中的asyncio库提供了许多异步I/O操作,如异步文件读写、异步网络请求等。

 import asyncio async def read_file():     async with aiofiles.open("file.txt", mode="r") as f:         content = await f.read()         print(content) async def main():     await read_file() asyncio.run(main())

Python中的异步编程可以帮助我们编写高效、可扩展的并发代码,通过使用asyncio库和协程,我们可以更好地利用多核CPU和I/O资源,提高程序的性能。


下面是一个简单的介绍,概述了 Python 中 Asyncio 库的一些关键概念:

Python 中的异步编程:Asyncio(图片来源网络,侵删)
概念/组件 描述
async 关键字,用于定义异步函数,异步函数是可以通过await 表达式暂停执行的函数。
await 表达式用于挂起异步函数的执行,直到等待的对象准备好,它只能在异步函数内部使用。
async for 在异步迭代中使用,允许异步迭代一个异步可迭代对象。
async with 在异步上下文管理器中使用,允许在异步代码中使用with 语句。
Event Loop 事件循环是 asyncio 的核心,负责调用准备好的异步任务,并在任务等待时处理其他事件。
Future 代表尚未完成的计算结果的代理对象,我们不会直接创建 Future 对象,而是通过await 表达式与它们交互。
Task 是基于 Future 的对象,用于并发地调度和运行协程,通过asyncio.create_task() 创建。
Coroutine 协程是一个通过async 定义的函数,它可以通过await 表达式暂停和恢复执行。
asyncio.run() 在 Python 3.7+ 中引入,用于运行最高层级的入口点协程。
asyncio.gather() 并发运行多个协程,并等待它们全部完成。
asyncio.shield() 防止一个协程被取消,如果被shield 保护的协程被取消,不会传播到它的父协程。
asyncio.sleep() 异步版本的time.sleep(),它不会阻塞事件循环。
asyncio.Lock() 一个异步的互斥锁,用于防止多个协程同时访问共享资源。
asyncio.Queue 异步队列,允许在协程之间安全地传输数据。
asyncio.create_task() 创建一个 Task 对象,用于并发地调度协程。
asyncio.CancelledError 当一个任务被取消时抛出的异常。
asyncio.TimeoutError 当一个操作等待超时时抛出的异常。

请注意,这个介绍只提供了一个快速概览,每个概念在异步编程中都有其详细的用法和重要性。

相关内容

热门资讯

托举天舟十号升空!长七火箭“美... 5月11日8时14分,天舟十号货运飞船载着总重近6.2吨的补给物资和实验载荷,在长征七号遥十一运载火...
“一人公司”社区落地贵阳高新区 5月7日,贵州科学城科技创新园与贵州星梦源科技有限公司正式签署合作协议,共同落地OPC(One Pe...
市、区科协联合开展科普大篷车进... 2026.5.11 近日,兰州市科协与城关区科协科普大篷车先后联合走进城关区拱星墩小学、文璟学校、甘...
科技保险从有保障迈向高质量 从人形机器人到人工智能大模型,从创新药到光电融合芯片……近年来,科技创新领域成果不断涌现。科技创新是...
天舟十号带货!太空光伏炸场,柔... 5 月 11 日,天舟十号货运飞船成功发射,除常规补给外,一件 “黑科技” 货物引爆市场 —— 我国...