首页 >后端开发 >Python教程 >如何在 Python 中使用 Async/Await 实现'一劳永逸”?

如何在 Python 中使用 Async/Await 实现'一劳永逸”?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-14 10:21:01913浏览

How Can I Achieve

Python 中的 Async/Await“Fire and Forget”

问题陈述

Async/await 为 Python 中的异步编程提供了便捷的语法。但是,在某些情况下,我们希望启动异步操作而不等待其完成。这通常被称为“一劳永逸”。

使用 asyncio.Task 的解决方案

Python 提供了 asyncio.Task,它允许我们创建一个在后台执行的任务。使用 asyncio.Task,我们可以通过在脚本中添加以下代码来实现“即发即忘”:

import asyncio

async def async_foo():
    # Do some asynchronous stuff here

# Create a task for async_foo()
asyncio.ensure_future(async_foo())

这会为 async_foo() 创建一个任务,该任务将异步执行而不会阻塞主线程。

处理待处理任务

如果我们的脚本在所有任务完成之前完成,我们可以使用以下代码来等待所有待处理任务:

pending_tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*pending_tasks))

这可以确保所有任务在脚本退出之前已完成,防止出现任何警告或错误。

取消任务

在某些情况下,我们可能不想等待任务完成。我们可以使用以下代码取消它们:

for task in pending_tasks:
    task.cancel()
    with suppress(asyncio.CancelledError):
        loop.run_until_complete(task)

这会取消任务并抑制因取消而可能引发的任何错误。

以上是如何在 Python 中使用 Async/Await 实现'一劳永逸”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn