跳到内容

在异步函数中运行进程 (ASYNC221)

派生自 flake8-async linter。

作用

检查异步函数是否使用阻塞方法运行进程。

为什么这不好?

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

与其进行阻塞调用,不如使用等效的异步库或函数,例如 trio.run_process()anyio.run_process()

示例

import subprocess


async def foo():
    subprocess.run(cmd)

建议改为

import asyncio


async def foo():
    asyncio.create_subprocess_shell(cmd)