跳到内容

在异步函数中等待进程 (ASYNC222)

派生自 flake8-async linter。

作用

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

为什么这不好?

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

不要进行阻塞调用,而应使用等效的异步库或函数,例如trio.to_thread.run_sync()anyio.to_thread.run_sync()

示例

import os


async def foo():
    os.waitpid(0)

建议改为

import asyncio
import os


def wait_for_process():
    os.waitpid(0)


async def foo():
    await asyncio.loop.run_in_executor(None, wait_for_process)