2012-03-28 20 views
1

Ich habe eine Django-App, die für die Verwaltung von Anmeldungen zu einer Umfrage verwendet wird.Fragen über Django Thread Sicherheit

Es gibt eine feste Anzahl von Steckplätzen und ich möchte die Steckplätze für Benutzer reservieren, wenn sie sich anmelden. In einer meiner Ansichten, bekomme ich den nächsten verfügbaren Steckplatz und reserviere es (oder umleiten den Benutzer, wenn keine Steckplätze zur Verfügung stehen.)

Ich möchte vor dem Fall schützen, wo zwei Benutzer gleichzeitig anmelden für den gleichen Slot registriert, weil die Methode "get_next_available_slot" für beide Benutzer den gleichen Slot zurückliefert.

Dafür versuche ich die Verwendung von Prozessen und Threads mit Djangos Ansichten zu verstehen.

1) Wird jede Anfrage in einem separaten Thread behandelt und verwendet LOCK() des Python-Threading-Moduls exklusiven Zugriff?

2) Ich starte Apache auf RHEL mit modwsgi. Wie konfiguriere ich Apache/modwsgi, um eine einfachere und einfachere Lösung für die oben genannte Situation zu gewährleisten?

Ich erwarte keine große Belastung der Web-Anwendung überhaupt. Ich möchte also eine einfachere Lösung anstelle einer Hochleistungslösung.

+0

Für einige Hintergrundinformationen zu Prozessen/Threading-Modell in Apache/mod_wsgi lesen Sie http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading –

Antwort

2

Sie sollten keine Annahmen über die Thread/Prozess-Einrichtung der django-Anwendung treffen, da es auf dem von Ihnen verwendeten Webserver und darauf, wie Django integriert ist, ankommt. Daher sollten Interprozesskommunikationsmethoden nicht darauf vertrauen, dass diese Details zuverlässig sind. Eine gute Lösung ist die Verwendung der integrierten Cache-Bibliothek für Sperren und gemeinsame Daten.

Hier ist eine good example Cache-Sperre, die sicherstellt, dass nur einmal die Sellerie-Aufgabe gleichzeitig ausgeführt wird. Sie können es auch auf reguläre Anfragen anwenden.

1

Sie sollten sich keine Sorgen über diese Art von Sachen machen.

Diese Steckplätze sind in einer Datenbank gespeichert, oder? Die Datenbank sollte alle Sperrmechanismen für Sie handhaben, stellen Sie einfach sicher, dass Sie alles unter einer Transaktion ausführen, und alles wird gut.