推荐答案
在 Python 中,可以使用 asyncio
模块来执行异步任务。以下是一个简单的示例,展示如何创建和执行异步任务:
-- -------------------- ---- ------- ------ ------- ----- --- ---------- ----------- --------- ----- ---------------- ----------- ----------- ----- --- ------- - ---- ---- - ------------------------------ - ------ ----- ---- - ----- -------------------
在这个示例中,my_task
是一个异步函数,asyncio.create_task()
用于创建一个任务,await
用于等待任务完成。
本题详细解读
1. asyncio
模块
asyncio
是 Python 标准库中的一个模块,用于编写单线程并发代码,通常用于 I/O 密集型任务。它提供了事件循环、协程、任务等工具来管理异步任务。
2. 异步函数
异步函数使用 async def
定义,函数内部可以使用 await
关键字来暂停函数的执行,直到等待的操作完成。例如,await asyncio.sleep(1)
会让函数暂停 1 秒钟。
3. 创建任务
asyncio.create_task()
用于将一个协程包装成一个任务(Task
对象)。任务是一个更高级别的抽象,它允许你在事件循环中并发地运行多个协程。
4. 等待任务
使用 await
关键字可以等待一个任务完成。在 main
函数中,await task
会等待 my_task
任务完成后再继续执行。
5. 运行事件循环
asyncio.run()
是 Python 3.7 引入的一个方便的函数,用于运行一个异步函数并管理事件循环。它会自动创建事件循环,运行传入的协程,并在完成后关闭事件循环。
6. 并发执行多个任务
你可以创建多个任务并并发地执行它们。例如:
async def main(): task1 = asyncio.create_task(my_task()) task2 = asyncio.create_task(my_task()) await task1 await task2
在这个例子中,task1
和 task2
会并发执行,await task1
和 await task2
会等待它们分别完成。
7. 任务取消
你可以使用 task.cancel()
来取消一个任务。取消任务会引发 asyncio.CancelledError
异常,你可以在任务中捕获这个异常来执行清理操作。
-- -------------------- ---- ------- ----- --- ---------- ---- ----------- --------- ----- ---------------- ----------- ----------- ------ ----------------------- ----------- ----------- ----- --- ------- ---- - ------------------------------ ----- ------------------ ------------- ----- ---- -------------------
在这个例子中,任务会在 0.5 秒后被取消,并输出 "Task cancelled"。