Quart framework ADVERTENCIA:asyncio:Ejecutando
Estamos utilizando el marco web Quart de Python Quart (Flask+asyncio). Cada vez que se procesa una solicitud y se envía la respuesta a un cliente, se registra este mensaje (o similar):
ADVERTENCIA:asyncio:Ejecutando
<asgihttpconnection.handle_solicitud() en=”” ejecución=”” en=”” usr/local/lib/python3.8/site-packages/quart/asgi.py:102=””> esperar= ()] creado en /usr/local/lib/python3.8/asyncio/base/events.py:422> cb=[wait. .en_completado() en /usr/local/lib/python3.8/asyncio/tasks.py:518] creado en /usr/local/lib/python3.8/site-packages/quart/asgi.py:46> tomó 2.700 segundos
Dado que es una ADVERTENCIA, nos preocupa qué podría ser esto. ¿Alguien tiene alguna idea de por qué aparece un registro como este?
También he visto más registros que comienzan con
Para replicar un mensaje de registro similar, es suficiente con hacer lo siguiente:
import time
from quart import Quart
app = Quart(__name__)
@app.route('/', methods=['POST'])
async def endpoint():
time.sleep(0.5)
return '', 200
Si configuro sleep() con un valor más bajo (por ejemplo, 0.05), el mensaje de registro no se imprime.</asgihttpconnection.handle_solicitud()>
davy.ai
El mensaje de registro
WARNING:asyncio:Ejecutando <task pending="" name='Task-11' coro=""></task><asgihttpconnection.handle_request() running="" at="" usr/local/lib/python3.8/site-packages/quart/asgi.py:102=""> wait_for=<future pending="" cb=""></future><taskwakeupmethwrapper object="" at="" 0x7f742ba41ee0="">()] created at /usr/local/lib/python3.8/asyncio/base_events.py:422> cb=[_wait.<locals>._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> ha tardado 2.700 segundos
aparece porque la función de manejo de solicitudesASGIHTTPConnection.handle_request()
tardó mucho tiempo en completarse. El mensaje de registro es una advertencia porque indica que el bucle de eventos estuvo bloqueado durante un período prolongado de tiempo, lo cual puede generar problemas de rendimiento y retrasos en otras solicitudes.Los registros que comienzan con
<task pending name...
están relacionados con el módulo asyncio utilizado en quart, y se refieren a corutinas que han sido programadas para ejecutarse pero aún no se han ejecutado. estos registros no necesariamente representan un problema y se utilizan para ayudar a los desarrolladores a solucionar problemas con el código asyncio.para evitar la solicitud de larga duración y el registro de advertencia asociado, puedes intentar optimizar la función de manejo de solicitudes para que se complete rápidamente o mover las operaciones de larga duración a una tarea en segundo plano. alternativamente, puedes aumentar la duración máxima durante la cual el bucle de eventos puede estar bloqueado antes de emitir una advertencia utilizando la función
loop.set_slow_callback_duration()
. pending=”” name…="" están="" relacionados="" con="" el="" módulo="" asyncio="" utilizado="" en="" quart,="" y="" se="" refieren="" a="" corutinas="" que="" han="" sido="" programadas="" para="" ejecutarse="" pero="" aún="" no="" se="" han="" ejecutado.="" estos="" registros="" no="" necesariamente="" representan="" un="" problema="" y="" se="" utilizan="" para="" ayudar="" a="" los="" desarrolladores="" a="" solucionar="" problemas="" con="" el="" código="" asyncio.="" para="" evitar="" la="" solicitud="" de="" larga="" duración="" y="" el="" registro="" de="" advertencia="" asociado,="" puedes="" intentar="" optimizar="" la="" función="" de="" manejo="" de="" solicitudes="" para="" que="" se="" complete="" rápidamente="" o="" mover="" las="" operaciones="" de="" larga="" duración="" a="" una="" tarea="" en="" segundo="" plano.="" alternativamente,="" puedes="" aumentar="" la="" duración="" máxima="" durante="" la="" cual="" el="" bucle="" de="" eventos="" puede="" estar="" bloqueado="" antes="" de="" emitir="" una="" advertencia="" utilizando="" la="" función=""></task pending name...
están relacionados con el módulo asyncio utilizado en quart, y se refieren a corutinas que han sido programadas para ejecutarse pero aún no se han ejecutado. estos registros no necesariamente representan un problema y se utilizan para ayudar a los desarrolladores a solucionar problemas con el código asyncio.para evitar la solicitud de larga duración y el registro de advertencia asociado, puedes intentar optimizar la función de manejo de solicitudes para que se complete rápidamente o mover las operaciones de larga duración a una tarea en segundo plano. alternativamente, puedes aumentar la duración máxima durante la cual el bucle de eventos puede estar bloqueado antes de emitir una advertencia utilizando la función
loop.set_slow_callback_duration()
.></asgihttpconnection.handle_request()>