Rennbedingungen im Django

Hier ist ein einfaches Beispiel einer django-Ansicht mit einer möglichen race-condition:

# myapp/views.py
from django.contrib.auth.models import User
from my_libs import calculate_points

def add_points(request):
    user = request.user
    user.points += calculate_points(user)
    user.save()

Race-Bedingung sollte klar sein: Ein Benutzer kann diese Anfrage zweimal, und könnte die Anwendung möglicherweise die Ausführung von user = request.user gleichzeitig, wodurch eine Anforderung zum überschreiben der anderen.

Nehme an, dass die Funktion calculate_points ist relativ kompliziert, und macht Berechnungen, basierend auf alle Arten von seltsamen Sachen, die nicht platziert werden kann in einer einzigen update und würde schwierig sein, um in einer gespeicherten Prozedur.

So, hier ist meine Frage: Welche Art von locking-Mechanismen verfügbar sind, um django, um mit Situationen wie dieser?

InformationsquelleAutor der Frage Fragsworth | 2009-06-23

Schreibe einen Kommentar