serialisieren von Binärdateien für die Verwendung mit einer Sellerieaufgabe

8

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.

%Vor%

und nannte die Aufgabe dann wie folgt:

%Vor%

Wenn die Methode apply_async aufgerufen wird, wird die folgende Ausnahme ausgelöst:

%Vor%

Ich denke, das liegt daran, dass Sellerie (standardmäßig) pickle library zum Serialisieren von Daten verwendet und Pickle die Binärdatei nicht serialisieren kann.

Frage

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?

    
Amyth 02.01.2013, 07:45
quelle

1 Antwort

3

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:

  • Sie senden weniger Daten an Ihre Warteschlange
  • Sie müssen sich nicht mit Dateninkonsistenzproblemen beschäftigen
  • es ist in Ihrem Fall tatsächlich möglich:)

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?

    
dzida 15.01.2013, 19:31
quelle

Tags und Links