Warum verlässt Django die Sperren in mysql?

8

Ich habe eine Django-App, die MySQL und die InnoDB-Engine für den Speicher verwendet. Aus irgendeinem Grund hinterlässt Django manchmal Sperren, selbst nachdem die Abfrage abgeschlossen wurde. (Ich kann sie mit Innotop sehen).

Das einzige, was ich in meinem Code für die Transaktionsverarbeitung tue, ist, dass ich django.db.transaction.commit_on_success für einige meiner save () - Methoden angegeben habe, in denen ich mit der Vererbung mehrerer Tabellen arbeite.

Wenn ich den Apache-Server neu starte, verschwinden die Sperren.

Hat jemand so etwas gesehen? Könnte ich ein Anti-Pattern geschrieben haben, das das verursacht?

    
Chris Curvey 21.06.2010, 17:44
quelle

1 Antwort

1

Das einzige Mal, dass ich es geschafft habe, war, "geplante" Aufgaben in Django einzurichten, die nicht mit Anfragen / Ansichten zusammenhingen. Das standardmäßige Auto-Commit-Transaktionsverarbeitungssystem schreibt Transaktionen nur dann fest, wenn ein Anfrage / Antwort-Paar abgeschlossen und an den Endbenutzer zurückgesendet wurde. Daher wird beim Erstellen kroner Aufträge, die ohne gesendete Anforderung ausgeführt werden, dieser Mechanismus umgangen.

Sonst ist es im Allgemeinen ziemlich schwierig, eine Sperre nicht auslösen zu lassen. Sie sind sich sicher, dass es nicht extrem lange laufende Code-Blöcke gibt (die sich vielleicht auf einen externen Dienst verlassen, der Zeit oder etwas Ähnliches benötigt), um Dinge zu binden?

    
Gabriel Hurley 21.06.2010 19:13
quelle

Tags und Links