Django - Ausführen einer Aufgabe durch Sellerie aus einem Modell

8

In meinem models.py:

%Vor%

In meiner tasks.py:

%Vor%

Dies gibt Folgendes zurück:

  • Ausnahmetyp: ImportError
  • Ausnahmewert: kann Namensaufgaben nicht importieren

Der Fehler verschwindet, wenn ich from core.models import Image in tasks.py auskommentiere, aber das wird offensichtlich ein Problem verursachen, da Image hier keine Bedeutung hat. Ich habe versucht, es in create_thumbnail zu importieren, es erkennt jedoch immer noch Image nicht.

Ich habe irgendwo gelesen, dass normalerweise das Objekt selbst als Argument an eine Aufgabe übergeben werden kann und das würde mein Problem lösen. Ein Freund hat mir jedoch einmal gesagt, dass es die beste Vorgehensweise ist, so wenig Daten wie möglich in eine RabbitMQ-Nachricht zu senden. Um dies zu erreichen, versuche ich, die Bild-ID nur zu übergeben und sie dann erneut in der Aufgabe abzurufen. p>

1) Was versuche ich als Best Practice? Wenn ja, wie arbeite ich es aus?

2) Ich habe in allen Beispielen, die ich im Internet gefunden habe, bemerkt, dass sie die Aufgabe aus einer Sicht und niemals aus einem Modell ausführen. Ich versuche ein Miniaturbild zu erstellen, wenn ein neues Bild hochgeladen wird. Ich möchte create_thumbnail nicht in jeder Form / Ansicht aufrufen, die ich habe. Irgendeine Idee dazu? Wird eine Aufgabe von einem Modell ausgeführt, das nicht empfohlen oder allgemein üblich ist?

    
abstractpaper 12.11.2011, 19:48
quelle

3 Antworten

13
  

1) Was versuche ich als Best Practice? Wenn ja, wie arbeite ich es aus?

Ja, nur ein paar Informationen an die Aufgabe zu übergeben, ist im Allgemeinen eine gute Sache, wie Sie erwähnt haben.

  

2) Ich habe in allen Beispielen, die ich im Internet gefunden habe, bemerkt, dass sie die Aufgabe aus einer Sicht und niemals aus einem Modell ausführen. Ich versuche ein Miniaturbild zu erstellen, wenn ein neues Bild hochgeladen wird. Ich möchte create_thumbnail nicht in jeder Form / Ansicht aufrufen, die ich habe. Irgendeine Idee dazu? Wird eine Aufgabe von einem Modell ausgeführt, das nicht empfohlen oder allgemein üblich ist?

Ich habe das Gleiche bemerkt und fühle, dass Tutorials und Dokumentationen Tasks aus ihren Ansichten aufrufen, weil es einfacher ist zu demonstrieren, wie Dinge mit einfachen Views funktionieren als mit Modellen oder Formularen.

Um Kreisimporte zu vermeiden, sollten Sie darüber nachdenken, in welcher Weise die Importe passieren sollten. Im Allgemeinen muss task.py viele Dinge aus models.py importieren, während models.py selten etwas über task.py wissen muss. Der Standard sollte sein, dass models.py nicht von tasks.py importiert wird. Wenn Sie dies tun müssen und eine Aufgabe über eine Modellmethode aufrufen, müssen Sie den Import in der Methode folgendermaßen durchführen:

%Vor%     
Spike 13.11.2011, 02:58
quelle
4
___ antwort8110480 ___

Sie müssen die Aufgabe nicht selbst importieren. Versuchen Sie es mit dem folgenden

%Vor%     
___ tag123django ___ Django ist ein serverseitiges Open-Source-Webanwendungs-Framework, das in Python geschrieben wurde. Es wurde entwickelt, um den Aufwand für die Erstellung komplexer datengesteuerter Websites und Webanwendungen zu reduzieren, mit besonderem Fokus auf weniger Code, keine Redundanz und expliziter als implizit. ___ qstnhdr ___ Django - Ausführen einer Aufgabe durch Sellerie aus einem Modell ___ answer8107111 ___

Ich frage mich, ob das Problem ein zirkulärer Import sein könnte ( %code% und %code% importieren sich gegenseitig auf der obersten Ebene). versuche, " %code% " in %code% zu verschieben, d. h. %code% zu

zu ändern %Vor%     
___ qstntxt ___

In meinem models.py:

%Vor%

In meiner tasks.py:

%Vor%

Dies gibt Folgendes zurück:

  • Ausnahmetyp: ImportError
  • Ausnahmewert: kann Namensaufgaben nicht importieren

Der Fehler verschwindet, wenn ich %code% in %code% auskommentiere, aber das wird offensichtlich ein Problem verursachen, da %code% hier keine Bedeutung hat. Ich habe versucht, es in %code% zu importieren, es erkennt jedoch immer noch %code% nicht.

Ich habe irgendwo gelesen, dass normalerweise das Objekt selbst als Argument an eine Aufgabe übergeben werden kann und das würde mein Problem lösen. Ein Freund hat mir jedoch einmal gesagt, dass es die beste Vorgehensweise ist, so wenig Daten wie möglich in eine RabbitMQ-Nachricht zu senden. Um dies zu erreichen, versuche ich, die Bild-ID nur zu übergeben und sie dann erneut in der Aufgabe abzurufen. p>

1) Was versuche ich als Best Practice? Wenn ja, wie arbeite ich es aus?

2) Ich habe in allen Beispielen, die ich im Internet gefunden habe, bemerkt, dass sie die Aufgabe aus einer Sicht und niemals aus einem Modell ausführen. Ich versuche ein Miniaturbild zu erstellen, wenn ein neues Bild hochgeladen wird. Ich möchte create_thumbnail nicht in jeder Form / Ansicht aufrufen, die ich habe. Irgendeine Idee dazu? Wird eine Aufgabe von einem Modell ausgeführt, das nicht empfohlen oder allgemein üblich ist?

    
___ tag123cellery ___ Sellery ist ein verteiltes Aufgabenwarteschlangen-Framework für Python, das für die asynchrone und parallele Ausführung verwendet wird. ___ tag123rabbitmq ___ RabbitMQ ist ein Open-Source-Nachrichtenbroker, der ursprünglich das AMQP-Protokoll mit zusätzlichen Nachrichtenprotokollen implementiert, die über eine Plug-in-Architektur unterstützt werden. Dieses Tag sollte bei Fragen verwendet werden, die das Message Broker-Produkt des RabbitMQ-Servers betreffen, oder bei Fragen zum Quellcode und zur Implementierung des RabbitMQ-Produkts. Ein bestimmtes Protokoll-Tag, wie beispielsweise amqp oder mqtt, kann ebenso geeignet sein wie das Betriebssystem und die verwendete Programmiersprache. ___ answer8109287 ___
  

1) Was versuche ich als Best Practice? Wenn ja, wie arbeite ich es aus?

Ja, nur ein paar Informationen an die Aufgabe zu übergeben, ist im Allgemeinen eine gute Sache, wie Sie erwähnt haben.

  

2) Ich habe in allen Beispielen, die ich im Internet gefunden habe, bemerkt, dass sie die Aufgabe aus einer Sicht und niemals aus einem Modell ausführen. Ich versuche ein Miniaturbild zu erstellen, wenn ein neues Bild hochgeladen wird. Ich möchte create_thumbnail nicht in jeder Form / Ansicht aufrufen, die ich habe. Irgendeine Idee dazu? Wird eine Aufgabe von einem Modell ausgeführt, das nicht empfohlen oder allgemein üblich ist?

Ich habe das Gleiche bemerkt und fühle, dass Tutorials und Dokumentationen Tasks aus ihren Ansichten aufrufen, weil es einfacher ist zu demonstrieren, wie Dinge mit einfachen Views funktionieren als mit Modellen oder Formularen.

Um Kreisimporte zu vermeiden, sollten Sie darüber nachdenken, in welcher Weise die Importe passieren sollten. Im Allgemeinen muss task.py viele Dinge aus models.py importieren, während models.py selten etwas über task.py wissen muss. Der Standard sollte sein, dass models.py nicht von tasks.py importiert wird. Wenn Sie dies tun müssen und eine Aufgabe über eine Modellmethode aufrufen, müssen Sie den Import in der Methode folgendermaßen durchführen:

%Vor%     
___
Mo J. Mughrabi 13.11.2011 08:20
quelle
1

Ich frage mich, ob das Problem ein zirkulärer Import sein könnte ( models und tasks importieren sich gegenseitig auf der obersten Ebene). versuche, " from core.models import Image " in create_thumbnail zu verschieben, d. h. tasks zu

zu ändern %Vor%     
second 12.11.2011 19:52
quelle

Tags und Links