2017-05-16 10 views
1

Ich teste meine App für Concurrency ich django-Concurrencydjango-Parallelität ist nichts zu tun

Für jedes Modell bin mit hinzugefügt

from concurrency.fields import IntegerVersionField 

version = IntegerVersionField() 

Also ich mit zwei Browser-Fenster meiner App öffnen. Loggen Sie mit 2 verschiedenen Benutzern und der Bearbeitung mit beiden gleichen Datensatz. Speichere mit einem, dann speichere ich mit dem zweiten und immer zweiten überschreibt man den ersten. Grundsätzlich tut nichts. Es wird erwartet, dass bei meinem zweiten Speichern ein Fehler auftritt.

Was könnte das Problem sein?

Antwort

2

Ich habe noch nie Django Parallelität verwendet, und ich würde eine Meile laufen, wenn ich auf Anwendungen ausführen, die auf abstrakte Gleichzeitigkeit bieten, Transaktionsmanagement usw. auf allgemeine Konzepte der Parallelität Basierend. Dieses Verhalten scheint richtig zu sein. Hier gibt es keinen Fehler.

django-Parallelität ist eine optimistische Sperre [1] Implementierung für Django.

Unterstützte Django Versionen: 1.8.x, 1.9.x, 1.10.x., 1.11.x

Es verhindert, dass Benutzer tun gleichzeitige Bearbeitung in Django sowohl von UI und von einem django Befehl.

Was bedeutet dies eigentlich, dass zwei Benutzer nicht die gleiche Instanz zur gleichen Zeit ändern können. In Adhoc zwei Browser-Tests der Art, die gerade ausprobiert wurde, kann eine solche Situation nie produziert werden! Was normalerweise passiert, ist, dass die eine oder andere Transaktion normalerweise vollständig ausgeführt wird, da beim Testen kleiner Datenbanken auf localhost keine Latenz auftritt und alles sofort passiert.

Der richtige Weg zu testen, dies zu trennen Änderung Schalen zu öffnen ist, öffnet die gleiche Instanz sein und bearbeitet werden, wie in der django concurrency Führungs skizzierte. Oder testen Sie mit einem Multi-Thread-Client.

+0

danke, ich nahm an, dass es eine neue Versions-ID erstellen wird, wenn ich speichere und wenn ich erneut speichere, wird es überprüfen, dass Version-ID ist anders als eine es derzeit hat und wird einen Fehler beim zweiten Speichern geben ... Wenn es löst nur die Situation des gleichen Moments, es zu speichern ist nicht so nützlich. –

+0

Ja, es ist wahrscheinlich besser, Transaktionen manuell statt mit einer Blackbox zu behandeln – e4c5