Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

104
Visualizações
Django no responde a la llamada Ajax mientras realiza una tarea informática intensiva

Recientemente estoy usando Django para programar mi interfaz web para mi "motor de computación científica".

Envuelvo el "motor de computación" como un módulo de python y lo llamo dentro de Django Framework.

La función de compute() del "motor" tarda varios minutos en ejecutarse (uso ajax para activarlo), al mismo tiempo, dejo que el front-end haga una llamada ajax adicional cada 0,5 segundos para actualizar el estado de la CPU y la memoria a el front-end. Pero encuentro que el servidor no responde a la llamada ajax adicional hasta que finaliza el compute() .

Después de buscar, creo que podría usar la idea de multithreading múltiples o asynchronous

así que hago la función en views.py como a continuación.

def submit(request): #some prepare ........ # call the engine t = Thread(target = compute) t.start() return HttpResponse("started")

Pero el sistema aún no responde a mi llamada ajax adicional hasta que finaliza el compute() (El "motor" solo usa alrededor del 20% de la CPU, por lo que queda mucha potencia informática).

Soy un novato en la programación de back-end, no estoy seguro de cómo Django o el servidor de back-end manejan la solicitud internamente. Muchas gracias si alguien me puede dar alguna pista sobre cómo manejar esta situación.

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Nunca es una buena idea iniciar hilos desde puntos de vista como ese.

La forma más común de resolver esto es delegar el trabajo a un trabajador/proceso separado. Además de django, tiene otro proceso de python que busca trabajo.

Puede mantenerlo simple y hacer que la vista de Django almacene información sobre el trabajo que debe realizarse en algún formato en el disco o en una base de datos (esta sería la cola de trabajo). Luego, el proceso de trabajo se ejecutará en un ciclo verificando el trabajo disponible cada N segundos. Aumente la cantidad de trabajadores/procesos para agregar más poder de cómputo (limitado por su hardware, por supuesto)

La solicitud http que crea la solicitud de trabajo puede devolver un job_id que el usuario puede consultar para obtener el estado del trabajo. ¿El trabajo está pendiente/en progreso/terminado? Entonces, ¿tal vez el usuario también pueda obtener el resultado del trabajo o incluso metadatos como la duración y los registros?

También existen marcos para resolver problemas como este, como Celery y django-channels. El apio es probablemente más fácil para empezar, pero podría ser excesivo para lo que estás tratando de hacer.

La ventaja de usar trabajadores como este es que puede tener una API REST muy liviana en el frente y puede aumentar la cantidad de trabajadores, posiblemente en varios servidores a medida que aumenta la demanda.

about 4 years ago · Santiago Trujillo Relatório

0

Finalmente resolví este problema usando el subprocess de python

Hago mi código de "computación" en un archivo separado y uso Popen para llamarlo.

from subprocess import Popen def submit(request): #some prepare ........ # call the engine p = Popen(["python", "compute.py", <arguments>]) return HttpResponse("started")

Sin embargo, como se sugiere, el subprocess no es una práctica muy buena y segura. Esta solución es fácil de realizar, pero intentaré convertir el back-end al worker mode usando Celery o django-channels como sugirió @Grimmy.

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda