跳到内容

cancel-scope-no-checkpoint (ASYNC100)

派生自 flake8-async linter。

作用

检查不包含检查点的超时上下文管理器。

出于此检查的目的,yield 被视为检查点,因为检查点可能发生在调用者中,我们会屈服于调用者。

为什么这不好?

某些异步上下文管理器,例如 asyncio.timeouttrio.move_on_after,除非它们包含检查点,否则无效。 在没有 awaitasync withasync for 语句的情况下使用此类上下文管理器可能是一个错误。

示例

import asyncio


async def func():
    async with asyncio.timeout(2):
        do_something()

建议改为

import asyncio


async def func():
    async with asyncio.timeout(2):
        do_something()
        await awaitable()

参考