首页 > 后端开发 > Python教程 > 如何利用Python的Async/Await真正实现'Fire and Forget”?

如何利用Python的Async/Await真正实现'Fire and Forget”?

Patricia Arquette
发布: 2024-11-09 01:38:02
原创
949 人浏览过

How to Truly Achieve

Python 的 Async/Await 的“Fire and Forget”

在 Python 的 async/await 语法中,执行异步函数而不等待它并不'达到预期的“即发即忘”效果。相反,程序会退出并显示运行时警告。

asyncio.Task for “Fire and Forget”

要在 asyncio 中实现“fire andforget”,请使用 asyncio。任务创建一个在后台执行所需操作的任务。通过调用 asyncio.ensure_future(async_foo()),与 async_foo() 关联的任务将启动,并且不会等待其完成。对于不需要显式等待的异步操作,这是一种简单而有效的方法。

async def async_foo():
    print("Async foo started")
    await asyncio.sleep(1)
    print("Async foo done")


async def main():
    asyncio.ensure_future(async_foo())  # Fire and forget async_foo()
登录后复制

完成待处理任务

请注意,使用 asyncio 创建的任务。任务预计在事件循环结束之前完成。如果任务仍处于待处理状态,则会生成警告。为了防止这种情况,请在事件循环完成后显式等待所有待处理任务。

async def main():
    asyncio.ensure_future(async_foo())  # Fire and forget async_foo()

    loop = asyncio.get_event_loop()
    await asyncio.gather(*asyncio.Task.all_tasks())
登录后复制

取消任务而不是等待

或者,如果您不想无限期等待某些任务,您可以取消它们:

async def echo_forever():
    while True:
        print("Echo")
        await asyncio.sleep(1)


async def main():
    asyncio.ensure_future(echo_forever())  # Fire and forget echo_forever()

    loop = asyncio.get_event_loop()
    for task in asyncio.Task.all_tasks():
        task.cancel()
        with suppress(asyncio.CancelledError):
            await task
登录后复制

以上是如何利用Python的Async/Await真正实现'Fire and Forget”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板