跳到内容

async函数中阻塞的HTTP调用 (ASYNC210)

派生自 flake8-async linter。

作用

检查async函数是否包含阻塞的HTTP调用。

为什么这不好?

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

与其进行阻塞的HTTP调用,不如使用异步HTTP客户端库,例如aiohttphttpx

示例

import urllib


async def fetch():
    urllib.request.urlopen("https://example.com/foo/bar").read()

建议改为

import aiohttp


async def fetch():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://example.com/foo/bar") as resp:
            ...