2017-03-28 3 views
1

Je développe un projet en utilisant django - python, javascript. Lorsque j'appelle un processus de longue durée (prenant du temps) environ plus de 20 minutes à partir des vues, le processus démarre avec succès. J'ai utilisé loader dans ajax pour informer l'utilisateur que le processus est en cours d'exécution. Une fois le processus terminé, le chargeur s'arrête et passe à l'état terminé.Échec du chargement de la ressource: le serveur a répondu avec un statut de 504 (Gateway Timeout)

Mais le problème est chaque fois 14,59 minutes après le début du processus, le chargeur s'arrête et l'état passe à terminé. Mais le processus en cours n'est pas encore terminé. La page tombe en panne après ce moment. Une fois le processus terminé, je lie le résultat sous une étiquette dans la page Web. Dans cette étiquette, l'erreur 504 (Gateway Timeout) se pose. Dans le journal de la console Web Impossible de charger la ressource: le serveur a répondu avec un statut de 504 (Gateway Timeout), l'erreur ci-dessus s'imprime. Si quelqu'un sait s'il vous plaît aidez-moi à résoudre ce problème.

Est-ce que le django ferme la connexion après ce temps? Si oui, il est possible de mentionner timeout dans les paramètres django (settings.py). J'ai essayé de donner le délai d'attente dans l'appel d'ajax mais le même problème revient. Mon doute est sur le serveur de développement de Django. Y a-t-il un délai d'expiration dans le serveur de développement django? Mais quand je recherche ce problème, j'ai trouvé, dans serveur nginx le même type de problème se pose. Est-ce que django dépend de nginx ou l'utilise?

J'ai essayé de fournir toutes les informations concernant mon problème si d'autres clarifications, s'il vous plaît faites le moi savoir.

+0

Quel serveur Web êtes-vous en utilisant ? 'nginx'? Le délai d'expiration peut être configuré dans vos configurations de serveur. – abhishekkannojia

+0

Je suggère d'utiliser d'autres techniques comme celles mentionnées ici. [Qu'est-ce que Long-Polling, Websockets, SSE (Server-Sent Events) et Comet?] (Http://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse -and-comet) – abhishekkannojia

+0

Je n'ai pas utilisé de serveur web, j'utilise le serveur django par défaut c'est-à-dire le serveur de développement django. Je n'ai pas encore déployé. – Antro

Répondre

3

Le serveur ferme toujours sa connexion après un certain laps de temps, ce qui peut être modifié en changeant sa configuration, mais ce ne serait pas une bonne approche. Je vous suggère d'essayer de réduire le temps pris par le script par:

  • Optimisation de votre code.
  • Par la mise en cache des données qui doit être utilisée souvent
  • en utilisant les services de back-end qui traitera vos données et de les stocker dans le stockage temporaire comme memcache ou Redis qui peuvent être accessibles rapidement.

Aussi, vous devez gérer le délai d'attente de l'appel ajax:

$.ajax({ 
    ... 
    timeout: 1000, 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      //do something on timeout/show appropriate message. 
     } 
    } 
});​ 

Références pour peaufinage des performances et l'optimisation des techniques de codage réduisant ainsi le temps: https://docs.djangoproject.com/en/1.10/topics/db/optimization/ https://docs.djangoproject.com/en/1.10/topics/performance/ https://realpython.com/blog/python/caching-in-django-with-redis/

+0

J'ai déjà utilisé la fonction d'erreur pour le gérer, mais il n'entraîne pas de fonction d'erreur. – Antro