Python 中如何执行异步任务 (Task)?

推荐答案

在 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. 并发执行多个任务

你可以创建多个任务并并发地执行它们。例如:

在这个例子中,task1task2 会并发执行,await task1await task2 会等待它们分别完成。

7. 任务取消

你可以使用 task.cancel() 来取消一个任务。取消任务会引发 asyncio.CancelledError 异常,你可以在任务中捕获这个异常来执行清理操作。

-- -------------------- ---- -------
----- --- ----------
    ----
        ----------- ---------
        ----- ----------------
        ----------- -----------
    ------ -----------------------
        ----------- -----------

----- --- -------
    ---- - ------------------------------
    ----- ------------------
    -------------
    ----- ----

-------------------

在这个例子中,任务会在 0.5 秒后被取消,并输出 "Task cancelled"。

纠错
反馈