2010-02-19 8 views
1

J'ai une application Django, qui génère un thread pour communiquer avec un autre serveur, en utilisant Pyro.Django avec fastcgi et threads

Malheureusement, il semble que sous fastcgi, plusieurs versions de ce thread sont déclenchées, et un dictionnaire qui devrait être globalement constant dans mon programme ne l'est pas. (Parfois, il a les valeurs que j'attends, parfois non)

Quelle est la meilleure façon de s'assurer qu'il y a une et une seule copie d'un dictionnaire dans une application django/fastcgi?

Répondre

4

Je recommande fortement de ne pas compter sur global dans django. Le problème est que, tout comme vous semblez le rencontrer, le type de déploiement déterminera comment (ou si oui ou non) cet état global est partagé. Pour être un style nazi, c'est un niveau d'abstraction complètement différent du code, qui repose sur une certaine garantie d'état global cohérent.

Je ne suis pas expérimenté avec fastcgi, mais je crois comprendre que, comme beaucoup d'autres frameworks, il a un mode pré-fourchu et un thread. En mode pré-fourchu, vous avez des processus séparés, pas de threads, en exécutant votre code python. Cela signifie un cauchemar pour un état global partagé. À moins d'une solution de contournement fragile, qui devrait être possible et suggérée par quelqu'un, la seule rémanence sur laquelle vous pouvez vraiment compter est dans la base de données et, dans une moindre mesure, caching mechanism que vous choisissez. Vous pouvez utiliser le low-level api pour mettre en cache et récupérer des clés et des valeurs.