/ / Django: Wissen, wann eine Datei bereits gespeichert ist, nachdem storage.save () verwendet wurde - python, django, amazon-web-services, amazon-s3

Django: Wissen, wenn eine Datei bereits nach usign gespeichert wurde storage.save () - Python, Django, Amazon-Web-Services, Amazon-s3

Ich habe also ein Django-Modell mit einem FileField. Dieses FileField enthält im Allgemeinen ein Bild. Nachdem ich das Bild von einer Anfrage erhalten habe, muss ich einige Bildanalyseprozesse ausführen.

Das Problem ist, dass ich manchmal drehen mussdas Bild vor dem Ausführen der Analyse (das in Sellerie ausgeführt wird und das Modell erneut lädt, wobei die Instanz anhand der ID abgerufen wird). Also bekomme ich das Bild, drehe es und speichere es mit:

storage.save (image_name, new_image_file), wobei storage der Django-Standardspeicher ist (mit AWS S3)

Das Problem ist, dass in einigen kleineren Fällen (sagen wir mal1 in 1000) wird das Bild nicht bereits gedreht, wenn der Analyseprozess in Sellerie ausgeführt wird, nachdem der Rotationsprozess ausgeführt wurde, sondern wenn ich das Bild öffne, wird es bereits gedreht, sodass die Speichermethode anscheinend einige dauert Zeit zum Aktualisieren der Datei im Speicher (asynchron) ...

Hat jemand ein ähnliches Problem gehabt? Gibt es eine Möglichkeit, zu überprüfen, ob die Datei bereits aktualisiert wurde, z. B. mit einem Rückruf oder einer Art Handler?

Danke vielmals!

Antworten:

0 für die Antwort № 1

Keine magische Lösung hier. Sie müssen Zustände auf Ihrem Modell verwalten, insbesondere wenn Sie mit Sellerie-Aufgaben arbeiten. Möglicherweise benötigen Sie ein anderes Feld namens state mit den Staaten: NONE (es wird keine Aktion ausgeführt), PROCESSING (Aufgabe wurde an Sellerie gesendet, um zu verarbeiten) und DONE (Bild wurde gedreht)

NONE ist der Standardzustand. Sie sollten den Status POCESSING festlegen Vor Aufrufen der Sellerie-Task (und nicht innerhalb der Sellerie-Task, hatte bereits Fehler aus diesem Grund) und schließlich sollte die Sellerie-Task den Status auf DONE setzen, wenn sie fertig ist.

Wenn die Aufgabe schnell ist, wird der Benutzer keinen Unterschied bemerken, aber wenn es einige Zeit dauert, möchten Sie möglicherweise die Meldung "Bild wird verarbeitet, bitte versuchen Sie es noch einmal" oder ähnliches hinzufügen

Zumindest mache ich das so ... Hoffe das hilft