Ich habe vor kurzem Sellerie ( django -Sellerie um genauer zu sein) in einer meiner Anwendungen. Ich habe ein Modell in der Anwendung wie folgt.
%Vor% Jetzt, nachdem ein Benutzer eine Datei hochgeladen hat, möchte ich die ursprüngliche Datei in die Formate txt, pdf und doc konvertieren. Aufruf der convert_to_others
Methode ist ein bisschen ein teurer Prozess, so dass ich plane es asynchron mit Sellerie zu tun. Also schrieb ich eine einfache Sellerieaufgabe wie folgt.
und nannte die Aufgabe dann wie folgt:
%Vor% Wenn die Methode apply_async
aufgerufen wird, wird die folgende Ausnahme ausgelöst:
Ich denke, das liegt daran, dass Sellerie (standardmäßig) pickle
library zum Serialisieren von Daten verwendet und Pickle die Binärdatei nicht serialisieren kann.
Gibt es andere Serialisierer, die eine Binärdatei selbst serialisieren können? Wenn nicht, wie kann ich eine Binärdatei mit dem Standard pickle
Serializer serialisieren?
Sie haben Recht, dass Sellerie versucht, Daten zu beizen, für die das Beizen nicht unterstützt wird. Selbst wenn Sie einen Weg finden würden, Daten zu serialisieren, die Sie an die Sellerie-Aufgabe senden möchten, würde ich das nicht tun.
Es ist immer eine gute Idee, mindestens so viele Daten wie möglich an die Sellerie-Aufgaben zu senden. In diesem Fall würde ich nur die ID einer UserUploadedFile -Instanz übergeben. Mit diesem können Sie Ihr Objekt per ID in der Sellerie-Aufgabe holen und convert_to_others () ausführen.
Bitte beachten Sie auch, dass das Objekt seinen Status ändern kann (oder sogar gelöscht werden kann), bevor die Aufgabe ausgeführt wird, so dass es sicherer ist, das Objekt in Ihrer Sellerie-Aufgabe zu holen, anstatt die vollständige Kopie zu senden.
Um es zusammenzufassen: Wenn Sie nur eine Instanz-ID senden und sie in der Task erneut abrufen, erhalten Sie einige Dinge:
Nur "Nachteil" ist, dass Sie eine zusätzliche, kostengünstige SELECT-Abfrage durchführen müssen, um Ihre Daten erneut abzurufen, was im Großen und Ganzen als ein gutes Geschäft im Vergleich zum obigen Problem erscheint, nicht wahr?
Tags und Links django celery pickle binaryfiles