跳到内容

在异步函数中调用阻塞式打开文件 (ASYNC230)

派生自 flake8-async linter。

作用

检查异步函数是否使用阻塞方法(例如 open)打开文件。

为什么这不好?

通过阻塞调用阻塞异步函数将阻塞整个事件循环,阻止其在等待调用完成时执行其他任务,从而抵消了异步编程的好处。

不要进行阻塞调用,而是使用等效的异步库或函数。

示例

async def foo():
    with open("bar.txt") as f:
        contents = f.read()

建议改为

import anyio


async def foo():
    async with await anyio.open_file("bar.txt") as f:
        contents = await f.read()