2016-08-01 13 views
0

So habe ich ein Django-Modell, das ein FileField hat. Dieses FileField enthält im Allgemeinen ein Bild. Nachdem ich das Bild von einer Anfrage erhalten habe, muss ich einige Bildanalyseprozesse durchführen.Django: Wissen, wenn eine Datei bereits nach usign gespeichert wurde storage.save()

Das Problem ist, dass ich manchmal das Bild vor dem Ausführen der Analyse drehen muss (die in Sellerie läuft, das Modell erneut laden, die Instanz durch die ID erhaltend). So bekomme ich das Bild, drehen Sie es und speichern Sie es mit:

storage.save (image_name, new_image_file), in denen die Lagerung der django Standardspeicher ist (unter Verwendung von AWS S3)

Das Problem ist, dass in einigen kleineren Fällen (sagen wir 1 in 1000), das Bild ist nicht bereits gedreht, wenn der Analyseprozess in Sellerie ausgeführt wird, nachdem der Rotationsprozess ausgeführt wurde, aber danach, wenn ich das Bild öffne, ist bereits gedreht, so scheint es, dass die Speichermethode dauert einige Zeit, um die Datei im Speicher (asynchron) zu aktualisieren ...

Hatte jemand ein ähnliches Problem? Gibt es eine Möglichkeit zu überprüfen, ob die Datei bereits aktualisiert wurde, wie bei einem Callback oder einer Art Handler?

Vielen Dank!

Antwort

0

Keine magische Lösung hier. Sie müssen Zustände auf Ihrem Modell verwalten, insbesondere wenn Sie mit Sellerieaufgaben arbeiten. Sie könnten ein anderes Feld state mit den Staaten genannt müssen: NONE (keine Aktion erfolgt beeing), PROCESSING (Aufgabe wurde Sellerie Prozess gesendet) und DONE (Bild gedreht wurde)

NONE ist der Standardzustand. Sie sollten den POCESSING-Status vor einstellen, indem Sie die Sellerie-Aufgabe aufrufen (und nicht innerhalb der Sellerie-Aufgabe, hatte bereits Bugs) und die Sellerie-Aufgabe sollte den Status schließlich auf FERTIG setzen.

Wenn die Aufgabe der Benutzer keinen Unterschied sehen, wird nicht schnell ist, aber wenn es einige Zeit dauert, möchten Sie vielleicht eine Nachricht hinzufügen „Bild verarbeitet wird, versuchen Sie es erneut“ oder so ähnlich dest

Auf das ist wie ich es mache ... Hoffe, das hilft

+0

Die Rotation ist ein Prozess, der vor der eigentlichen Bildanalyse passiert, und was etwas zu dauern scheint, ist das gedrehte Bild gespeichert werden –