Gibt es eine Möglichkeit, Code nach dem Transaktions-Commit in Django auszuführen?Code nach dem Transaktions-Commit in Django ausführen
Ich muss einige Nachrichten an einen Rabbitmq-Server für die Offline-Verarbeitung senden, aber die Nachricht erhält den Verbraucher, bevor die Django-Transaktion festgeschrieben wird.
Meine Nachricht wird im post_save-Signal des Modells gesendet. Nach was ich suche, ist ein ähnlicher Mechanismus, der Signale oder etwas anderes verwendet, das Code nach dem Festschreiben ausführen würde (und nichts tun, wenn die Transaktion fehlschlägt).
Ich habe keinen generischen Weg gefunden, es in Django zu tun. Hast du eine Idee?
Ich hatte ein simmilar Problem. Bei post_save speichert der Verleger (Prozess 1) den Aufgabenstatus und veröffentlicht die Nachricht. Consumer (Prozess 2) empfängt die Nachricht und aktualisiert den Task-Status, der noch nicht in der Datenbank enthalten ist. Was funktionierte, war, den Verbraucher für eine Sekunde oder zwei in den Schlaf zu versetzen, nachdem er die Nachricht erhalten hatte. Fühlt sich sowieso schmutzig an. – ohnoes
Nachdem ich für 4 Stunden gekämpft habe, habe ich aus dieser Frage herausgefunden, dass wir keinen Code nach transaction.commit() haben können und jetzt läuft mein Code gut. Vielen Dank. – zubinmehta
Zugehöriges Ticket: https: //code.djangoproject.com/ticket/14051 – guettli