asyncio 包含以下几个主要的组件:协程
asyncio 支持使用 async/await 语法定义协程(coroutine)。协程是可以暂停和恢复执行的函数,可以实现非阻塞式的异步编程。
import asyncio
async def coroutine():
print('Hello')
await asyncio.sleep(1)
print('world')
asyncio.run(coroutine())
上述代码中,定义了一个协程 coroutine,它会输出 ‘Hello’,然后暂停执行一秒钟(使用 asyncio.sleep 函数),最后输出 ‘world’。调用 asyncio.run 函数来运行协程
任务
任务(task)是 asyncio 中的一种抽象,表示一个协程的执行。任务可以被取消、等待或组合,用于协调多个协程的执行。
例如,下面是一个使用 asyncio.create_task 函数创建任务的示例:
import asyncio
async def coroutine():
print('Hello')
await asyncio.sleep(1)
print('world')
async def main():
task = asyncio.create_task(coroutine())
await task
asyncio.run(main())
事件循环
事件循环(event loop)是 asyncio 的核心组件,它负责调度协程和处理事件。
例如,下面是一个简单的使用 asyncio 的事件循环实现定时任务的示例:
import asyncio
async def task():
print('Hello')
await asyncio.sleep(1)
print('world')
async def schedule():
while True:
await asyncio.sleep(5)
asyncio.create_task(task())
loop = asyncio.get_event_loop()
loop.create_task(schedule())
loop.run_forever()
上述代码中,定义了一个定时任务 task,它会输出 ‘Hello’,暂停执行一秒钟,然后输出 ‘world’。使用 asyncio.create_task 函数将任务添加到事件循环中。定义了一个协程 schedule,它使用 asyncio.sleep 函数实现定时功能,并调用 asyncio.create_task 函数添加定时任务到事件循环中。最后使用事件循环的 run_forever 方法启动事件循环,等待任务执行。
协程调度器
协程调度器(coroutine scheduler)是 asyncio 的另一个核心组件,它负责调度协程的执行顺序。
例如,下面是一个简单的使用 asyncio 的协程调度器实现并发任务的示例:
import asyncio
async def task1():
print('Hello')
await asyncio.sleep(1)
print('world')
async def task2():
print('Bonjour')
await asyncio.sleep(2)
print('monde')
async def main():
await asyncio.gather(task1(), task2())
asyncio.run(main())
上述代码中,定义了两个协程 task1 和 task2,它们会输出 ‘Hello’ 和 ‘Bonjour’,暂停执行一定时间,然后输出 ‘world’ 和 ‘monde’。使用 asyncio.gather 函数并发执行协程。