2010-04-05 5 views
1

J'ai une simple page django avec un compteur. J'utilise Apache2 avec mod_wsgi pour le servir. Tout d'abord, lorsque j'entre cette page, le compteur affiche 0, comme il se doit. La deuxième fois que j'entre dans la page, le compteur affiche 1 - encore une fois, c'est le bon comportement. Le problème commence maintenant, parce que quand j'entre cette page la troisième fois, je reçois 0 encore.rejouer dans django + apache + mod_wsgi?

Lorsque je l'actualise, il se situe entre 0 et 1, en utilisant clairement un peu de cache. Si j'attends un certain temps et que j'essaye de nouveau, il montrera 2, et 3, mais sera coincé avec ces valeurs, jusqu'à ce que ce cache ou quoi que ce soit soit vidé, et alors le compteur continue.

Est-ce que quelqu'un sait comment je peux le faire fonctionner correctement (le vrai scénario traite de l'obtention des données de la base de données, mais les problèmes avec ce cache étrange sont les mêmes).

BTW, je n'ai aucun moteur de mise en cache défini dans mes paramètres django.

Répondre

1

Vous exécutez plusieurs instances de votre Django. Apache se connecte de manière aléatoire à l'un d'entre eux.

Pour des fins de test, essayez dans votre apache.conf:

WSGIDaemonProcess mysite processes=1 maximum-requests=500 threads=1 

(Vous voudrez peut-être plus les processus en cours d'utilisation de la production.)

Voir full documentation d'options.

+0

Merci! Cette simple réponse ne m'est pas venue pour une raison quelconque. Savez-vous comment changer le nombre de ces instances, et quelles sont les conséquences de la réduction du nombre d'instances à 1? – Adam

+0

Nombre d'instances == processus * threads. Si une seule instance est en cours d'exécution, un seul client peut être servi en même temps, ce qui rend votre application lente pour les utilisateurs, en supposant qu'il existe plusieurs utilisateurs simultanés. – jholster

3

Nombre d'instances! = Traite * les discussions comme suggéré par une autre affiche. Nombre d'instances == processus seulement.

Lire:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

probable que vous utilisez le mode intégré. Vous devriez plutôt utiliser le mode démon.

Ne définissez pas 'processes = 1' car c'est la valeur par défaut et l'utilisation de l'option a d'autres effets secondaires que vous ne voulez pas.

Le nombre de threads par défaut pour le mode daemon est de 15, ce qui est correct tant que votre application est sûre pour les threads. Plus précisément, l'accès à votre compteur global doit être thread safe.

lire aussi:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

qui a un exemple de la façon de configurer le mode démon. Vous devez utiliser les deux directives WSGIDaemonProcess et WSGIProcessGroup, car WSGIDaemonProcess ne suffit pas.

+0

Merci pour info. N'est-il pas encore correct de dire _nombre de clients simultanés servis_ = processus * threads? – jholster

+0

Le maximum théorique sur le nombre de requêtes simultanées est process * threads, mais tous les threads d'un processus s'exécutent normalement dans la même instance d'interpréteur pour une application spécifique. Lire 'http://blog.dscpl.com.au/2009/03/python-interpreter-is-not-created-for.html', je pense que je parle un peu de ce genre de choses là-dedans. –

Questions connexes