Python 中的异步编程:Asyncio
创始人
2024-12-03 06:03:16
0
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 当一个操作等待超时时抛出的异常。

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

相关内容

热门资讯

科普!微信金花房卡哪里有卖,牛... 微信游戏中心:牛牛房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...
正版授权!牛牛房卡怎么获得天启... 正版授权!牛牛房卡怎么获得天启联盟/房卡价格表多少钱一张Sa9Ix苹果iPhone 17手机即将进入...
金花房卡购买平台推荐/微信牛牛... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享受...
终于知道”新云游如何买房卡“金... 终于知道”新云游如何买房卡“金花牛牛房卡充值游戏中心打开微信,添加客服【113857776】,进入游...
玩家攻略,金花房卡官网盘古大厅... 您好!微信盘古大厅大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(盘古大厅)大厅介绍:...
科普!炸金花链接房间从哪里买,... 微信游戏中心:炸金花房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信炸金花房...
终于知道”新道游如何买房卡“拼... 终于知道”新道游如何买房卡“拼三张房卡充值 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服【1...
正规平台有哪些,金花房卡批发海... 海贝之城房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
终于找到“微信群牛牛房卡去哪买... 美猴王牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
正版授权!金花房卡是正规的海贝... 正版授权!金花房卡是正规的海贝之城/正规房卡平台有哪些海贝之城是一款非常受欢迎的游戏,咨询房/卡添加...
科普!微信链接炸金花买房卡怎么... 微信游戏中心:拼三张房卡,添加微信【8488009】,进入游戏中心或相关小程序,搜索“微信拼三张房卡...
科技实测!金花房卡专卖店黄帝大... 微信游戏中心:黄帝大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
终于知道”龙鼎房卡获取“金花牛... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
头条推荐!金花微信链接市场价格... 头条推荐!金花微信链接市场价格表天道联盟/随意玩/房卡微信链接Sa9Ix苹果iPhone 17手机即...
微信牛牛金花链接版房卡充值方式... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...
科普!微信群打炸金花链接房卡,... 微信游戏中心:拼三张房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信拼三张房...
正版授权!牛牛房卡怎么获得超游... 您好!微信超游联盟大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(超游联盟)大厅介绍:...
终于知道”新西部是如何购买的“... 终于知道”新西部是如何购买的“拼三张房间卡怎么购买微信房卡充值 添加房卡批售商:微【11385777...
科普!微信炸金花房卡链接怎么弄... 微信游戏中心:炸金花房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信炸金花房...
牛牛房卡批发平台/微信牛牛房卡... 牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享受...