es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 antes. ¿Alguien sabe qué son estos registros?


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()>

Tags:  ,

Answer

  1. Avatar for 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 solicitudes ASGIHTTPConnection.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()>

Comments are closed.