asyncio 是 Python 中用于编写异步代码的标准库,它的核心是事件循环机制。事件循环负责调度和执行异步任务,使得多个任务可以在单线程中协同工作.
日常中用到的场景为,批量获取某手机的多个应用列表里面具体应用的信息时,需要异步处理,不然逐个获取遍历太慢了(异步2秒内,逐个为60秒可能不止)
1、事件循环:
事件循环是一个运行在单线程中的循环,它负责管理和调度异步任务。 在事件循环中,任务是以协程的形式存在,协程可以在执行过程中暂停(使用 await),并在合适的时机恢复执行。
2、任务调度:
事件循环通过调度器来管理任务的执行顺序。 当一个协程遇到 await 时,它会暂停执行,事件循环可以切换到其他任务。 事件循环会不断检查任务的状态,并在任务准备好继续执行时恢复它。
3、I/O 操作:
异步 I/O 操作是事件循环的一个重要部分。事件循环可以在等待 I/O 操作完成时执行其他任务。 这使得 asyncio 非常适合处理网络请求、文件读写等 I/O 密集型任务。
1、创建任务:
使用 asyncio.create_task() 或 loop.create_task() 可以将协程包装成任务,并提交给事件循环。 任务是事件循环调度的基本单位。
2、并发执行:
asyncio.gather() 可以用于并发执行多个协程。它会等待所有协程完成,并返回结果。 asyncio.wait() 可以用于等待多个任务完成,提供更细粒度的控制。
pythonimport asyncio
async def task(name, delay):
print(f"Task {name} started")
await asyncio.sleep(delay)
print(f"Task {name} finished")
return name
async def main():
# 创建多个任务
tasks = [
asyncio.create_task(task("A", 2)),
asyncio.create_task(task("B", 1)),
asyncio.create_task(task("C", 3))
]
# 并发执行任务
results = await asyncio.gather(*tasks)
print(f"Results: {results}")
# 运行事件循环
asyncio.run(main())
# Task A started
# Task B started
# Task C started
# Task B finished
# Task A finished
# Task C finished
Results: ['A', 'B', 'C']
本文作者:lixf6
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!