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.

Barra de procesamiento de Django entre dos solicitudes.

Tengo una aplicación intensiva en cálculos, que toma entradas y procesa alrededor de 10-15 fórmulas en las entradas, incluyendo cálculos similares a NPV (Valor Presente Neto) e IRR (Tasa Interna de Retorno). Estoy implementando los cálculos utilizando etiquetas de plantilla en Django. A continuación se muestran los fragmentos de código:

[filters.py][1]

@register.filter
def **client_irr**(value,arg):
    fcf_list = []

    for i in arg:
        fcf_list.append(fcf(value,i))

    return round(npf.irr(fcf_list) * 100,2)

[inputs.html][2]

<div class="products-row">
    <div class="product-cell price">{{ i.parameter }}</div>
    <div class="product-cell price">{{ i.units }}</div>
    <div class="product-cell price">{{ i.values|client_irr:total_time}}</div>
</div>

¡Hay muchos cálculos como estos!

¿Estoy implementando estos cálculos correctamente? No estoy seguro, ¡encuentro que esta forma es completamente incorrecta!

La solicitud (/inputs) para calcular los valores tarda unos 20-22 segundos y la interfaz de usuario se bloquea, lo cual crea una mala experiencia de usuario (UX).

Por lo tanto, estoy buscando una barra de procesamiento (de la cual no puedo encontrar un buen tutorial en Django) o una forma de optimizar estos cálculos.

¡Gracias, amigos! ¡Significa mucho! ¡Si tienen alguna solución, por favor ayúdenme!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Python, Django, Django-templates, Celery y Progress-Bar, sugeriría que implementar cálculos utilizando etiquetas de plantilla en Django puede ser bastante ineficiente, especialmente si tienes una gran cantidad de cálculos como estos. Parece que los cálculos están causando un cuello de botella en el procesamiento de las entradas, lo que resulta en tiempos de respuesta lentos y una experiencia de usuario pobre.

    Para optimizar estos cálculos, te recomendaría externalizar las tareas de cálculo a una cola de tareas distribuida como Celery. De esta manera, los cálculos se pueden realizar de forma asíncrona sin bloquear el hilo principal, lo que permite que la interfaz de usuario siga siendo receptiva y que la experiencia del usuario siga siendo fluida.

    Para implementar esto, deberías definir una tarea Celery que realice los cálculos y luego llamar a esta tarea de forma asíncrona desde tu vista de Django. Luego puedes usar la barra de progreso de Celery para hacer un seguimiento del progreso de la tarea y actualizar la interfaz de usuario en consecuencia. Alternativamente, también podrías investigar el uso de websockets para enviar actualizaciones al usuario en tiempo real a medida que se realizan los cálculos.

    En general, hay varias formas de optimizar aplicaciones intensivas en cálculos en Django, como utilizar colas de tareas distribuidas como Celery, implementar vistas asíncronas y actualizar la interfaz de usuario en tiempo real utilizando websockets. La clave está en identificar el cuello de botella en la aplicación y encontrar la solución más adecuada para abordarlo.

Comments are closed.