Quart 框架 WARNING:asyncio:Executing

Quart framework WARNING:asyncio:Executing

我们正在使用 Quart (Flask+asyncio) Python 网络框架。每次处理请求并将响应发送到客户端时,都会记录此(或类似)消息:

WARNING:asyncio:Executing <Task pending name='Task-11' coro=<ASGIHTTPConnection.handle_request() running at /usr/local/lib/python3.8/site-packages/quart/asgi.py:102> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7f742ba41ee0>()] created at /usr/local/lib/python3.8/asyncio/base_events.py:422> cb=[_wait.._on_completion() at /usr/local/lib/python3.8/asyncio/tasks.py:518] created at /usr/local/lib/python3.8/site-packages/quart/asgi.py:46> took 2.700 seconds

因为它是警告,我们有点担心这可能是什么。有谁知道为什么会出现这样的日志?

此外,我之前看到更多从 <Task pending name... 开始的日志。有谁知道这些日志是什么?


要复制类似的日志消息,只需执行以下操作即可:

import time

from quart import Quart


app = Quart(__name__)


@app.route('/', methods=['POST'])
async def endpoint():
    time.sleep(0.5)
    return '', 200

如果我将 sleep() 设置为较低的值(例如 0.05),则不会打印日志消息。

asyncio 和其他事件循环要求任务定期将控制权交还给事件循环,以便它可以切换到另一个任务并同时执行任务。此警告表明任务在两次产出之间花费了很长时间,因此 'blocking' 事件循环。

这很可能是因为您的代码正在做一些 CPU 密集的事情,或者更可能是使用非异步 IO,例如使用请求。您应该对此进行调查,因为它会降低您的服务器同时处理多个请求的能力。