2010-09-23 6 views
0

Je déploie les applications Django à l'aide d'un script fabric qui extrait une copie de mon projet et lorsque tout est en place, la source est symlinked et le serveur web est rechargé (supposant que c'est une approche typique). Je m'inquiète que la première fois que le site est touché après le déploiement, tous les scripts python doivent être réinterprétés. J'ai quelques idées brillantes sur la façon dont je pourrais forcer le code à être traité avant que les clients le touchent, mais je cherche des stratégies de haut niveau que les gens pourraient utiliser pour accomplir cela.Pré-interpréter le site Django au moment du déploiement

Toutes les suggestions sont les bienvenues. Merci d'avance pour tout conseil que vous pouvez offrir.

-Mike

+0

Ce temps de chargement initial vous dérange-t-il? Ou pré-optimisez-vous quelque chose qui - en réalité - n'a pas d'effet mesurable sur votre site? Quels problèmes de performance avez-vous ** réellement ** et êtes-vous sûr qu'ils ne sont pas liés à Internet, à une base de données ou à un système de fichiers? –

+0

@ S.Lott J'ai remarqué dans mon environnement de développement (qui recharge le code chaque fois qu'il est changé) que la première fois que je tape sur le nouveau code, la requête prend beaucoup plus de temps. Je suppose que les utilisateurs finaux pourraient avoir le même problème sur le serveur live lorsque le nouveau code est déployé. Suis-je perdre mon temps à essayer de pré-compiler pour cette raison ou devrais-je m'inquiéter? Merci. –

+0

"Je suppose que les utilisateurs finaux pourraient avoir le même problème". Pourquoi supposer cela? Mesure. Ce n'est clairement pas vrai, BTW. Mais vous devriez mesurer au lieu de simplement supposer. "Suis-je perdre mon temps à essayer de pré-compiler". Complètement. En outre, vous avez un biais de mesure terrible. Une charge (** un, 1 **) sur le nombre innombrable de demandes traitées avant la prochaine mise à jour logicielle est * insignifiante *. Ne vous attardez pas sur les choses qui arrivent ** une fois **. Rester sur les choses qui se produisent chaque demande unique. Performances de base de données, par exemple. –

Répondre

1
python -m compileall /path/to/django/site 

Est-ce que tous les fichiers précompiler py dans le répertoire récursive.

Comment lancez-vous django? Si vous utilisez WSGI, l'interpréteur ou les interprètes sont déjà en cours d'exécution et auraient déjà compilé une grande partie de votre site django. Qu'est-ce qui est chargé dynamiquement?

+0

Cool merci. Ouais en utilisant WSGI w/Apache. Donc, quand je recharge Apache, une grande partie du python est interprétée? J'avais l'impression que rien n'avait été traité avant que la première page ne soit demandée. –

+0

Pour autant que je sache, mod_wsgi fonctionne uniquement avec un nombre configurable d'interpréteurs python (> = 1) qui peuvent être ou non threadés. Lorsque apache démarre ces processus wsgi "worker", votre site django est chargé. – MattH

+0

Puisqu'ils partagent tous un ensemble commun de fichiers, la toute première fois qu'un interpréteur démarre, les fichiers .PYC sont générés. Le reste peut alors lire les fichiers .PYC, en économisant un peu de temps. Ils doivent cependant lire les fichiers .PYC, ce qui prend du temps. Et, ils doivent rechercher des fichiers de modèle. Et ouvrez une base de données. Le temps de compilation est minuscule par rapport aux frais généraux réels. –

Questions connexes