2010-06-11 11 views
1

J'ai une variable en init d'un module qui est chargé depuis la base de données et prend environ 15 secondes.Module Python en cours de rechargement pour chaque requête avec django et mod_wsgi

Pour le serveur de développement django, tout fonctionne correctement, mais avec apache2 et mod_wsgi le module est chargé à chaque requête (en 15 secondes).

Une idée de ce problème?

Mise à jour: J'ai activé le mode daemon dans le mod wsgi, on dirait qu'il ne recharge pas les modules maintenant! a besoin de plus de tests et je vais mettre à jour.

+1

Veuillez indiquer votre configuration apache mod_wsgi. – nosklo

+0

Comment le savez-vous? –

+0

@Ignacio En regardant les journaux – Vishal

Répondre

3

Vous avez probablement ignoré le fait qu'en mode embarqué de mod_wsgi ou avec mod_python, l'application est multiprocessus. Ainsi, les requêtes peuvent aller à des processus différents et vous verrez un retard la première fois qu'un processus qui n'a pas été touché avant est rencontré. En mode démon mod_wsgi, la valeur par défaut n'a qu'un seul processus. Cela ou comme quelqu'un d'autre a mentionné que vous avez MaxRequestsPerChild mis à 1, ce qui est une très mauvaise idée.

+0

J'ai compris, mais qu'est-ce que MaxRequestsPerChild a mis à 1 en mode daemon? – Vishal

+0

MaxRequestsPerChild n'est pas lié au mode démon, il affecte les processus enfants du serveur Apache. Le recyclage des processus fils du serveur Apache après une seule requête est très inefficace et affectera les performances du serveur. Plus encore si vous utilisez du code Python en mode embarqué en utilisant le mode intégré mod_python ou mod_wsgi. Les performances seront probablement moins bonnes que celles de CGI en raison du nettoyage et du recyclage des processus enfants du serveur Apache. –

+0

Merci pour l'explication ... – Vishal

1

Je suppose que vous aviez la valeur 1 pour MaxClients/MaxRequestsPerChild et/ou ThreadsPerChild dans vos paramètres Apache. Apache a donc dû démarrer Django pour chaque appel mod_python. C'est pourquoi ça a pris tellement de temps. Si vous avez un wsgi-daemon, alors un redémarrage ne prend place que si vous "touchez" le script wsgi.