asyncio子任务的自动取消
创始人
2024-09-21 07:30:37
0

在Python的asyncio模块中,当一个任务被取消时,默认情况下不会自动取消其子任务,这可能会导致意外的行为或资源泄漏。为了解决这个问题,可以使用try/finally语句块和asyncio的shield()函数。

示例代码如下:

import asyncio

async def child_task():
    try:
        while True:
            print("child task running")
            await asyncio.sleep(1)
    except asyncio.CancelledError:
        print("child task cancelled")
        raise

async def parent_task():
    child = asyncio.create_task(child_task())
    try:
        while True:
            print("parent task running")
            await asyncio.sleep(1)
    finally:
        child.cancel()  # 手动取消子任务,以防止意外泄漏

async def main():
    parent = asyncio.create_task(parent_task())
    await asyncio.sleep(5)
    parent.cancel()  # 取消父任务

asyncio.run(main())

在这个示例中,当执行parent.cancel()时,父任务被取消,并调用其finally块中的代码来手动取消子任务。shield()函数也可以用于确保子任务不会被取消,但应该谨慎使用,因为它可能会导致崩溃或其他意外结果。

相关内容

热门资讯

透视ai代打!wpk透视辅助下... 透视ai代打!wpk透视辅助下载,wpk模拟器多开,解说技巧(总是有挂);1、用户打开应用后不用登录...
透视辅助!德州局脚本,来玩ap... 透视辅助!德州局脚本,来玩app破解,揭秘教程(有挂解密);运德州局脚本辅助工具,进入游戏界面。进入...
透视ai代打!wpk俱乐部是做... 透视ai代打!wpk俱乐部是做什么的,wpk模拟器多开,玩家教程(总是真的有挂);1、不需要AI权限...
透视辅助!红龙poker辅助器... 透视辅助!红龙poker辅助器免费观看,sohoo竞技联盟辅助器,科技教程(有挂脚本)1、金币登录送...
透视模拟器!有哪些免费的wpk... 透视模拟器!有哪些免费的wpk作弊码,wpk私人局有透视吗,微扑克教程(总是存在有挂)1、有哪些免费...
透视有挂!佛手在线大菠萝技巧,... 透视有挂!佛手在线大菠萝技巧,德州局透视脚本下载安装最新版本,线上教程(有挂解密)1、每一步都需要思...
透视科技!智星德州辅助译码插件... 透视科技!智星德州辅助译码插件靠谱吗,红龙poker辅助工具,黑科技教程(有挂教程)在进入智星德州辅...
透视透视!wpk透视是真的假的... 透视透视!wpk透视是真的假的,wpk模拟器,详细教程(本来真的是有挂);1、全新机制【wpk透视是...
透视插件!智星德州有脚本吗,p... 透视插件!智星德州有脚本吗,pokemmo手机版脚本,2025新版总结(有挂技巧)1、智星德州有脚本...
透视黑科技!wpk作弊是真的吗... 透视黑科技!wpk作弊是真的吗,wpk透视辅助,玩家教你(总是真的是有挂);1、打开软件启动之后找到...