circular-dependency

___ answer26411453 ___

Verwenden Sie Signale.

tasks.py

%Vor%

models.py

%Vor%     
___ qstntxt ___

Ich habe eine Django-App, die Sellerie verwendet, um einige Aufgaben zu entfernen. Hauptsächlich wird die Berechnung einiger Felder in einer Datenbanktabelle verschoben.

Also, ich habe eine task.py:

%Vor%

Und in models.py

%Vor%

Nun wird das natürlich nicht funktionieren wegen eines zirkulären Imports ( %code% imports %code% und %code% imports %code% ).

Ich habe das für den Moment gelöst, indem ich %code% von %code% aufgerufen habe, aber es scheint sinnvoll zu sein, die Modelllogik innerhalb der Modellklasse zu belassen. Gibt es einen besseren Weg, dies zu tun?

    
___ qstnhdr ___ Aufhebung der Kreisimporte in Sellerie und Django ___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ tag123cellery ___ Sellery ist ein verteiltes Aufgabenwarteschlangen-Framework für Python, das für die asynchrone und parallele Ausführung verwendet wird. ___ 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. ___ answer30397422 ___

Die Lösung von joshua ist sehr gut, aber als ich es zum ersten Mal probiert habe, habe ich festgestellt, dass meine %code% Decorators keinen Effekt hatten. Das war, weil das Modul %code% nicht irgendwo importiert wurde, was erwartet wurde, da ich Automatische Erkennung der Aufgabe .

Es gibt jedoch eine andere Möglichkeit, %code% von %code% zu entkoppeln. Tasks können namentlich gesendet werden und müssen nicht in dem Prozess, der sie sendet, ausgewertet (importiert) werden:

%Vor%

%code% ist eine Methode für Sellery-App-Objekte.

Bei dieser Lösung ist es wichtig, auf korrekte Angaben zu achten , vorhersagbare Namen für Ihre Aufgaben.

    
___ answer43530409 ___

Um nur eine weitere nicht großartige Lösung in diese Liste zu packen, stütze ich mich auf django's jetzt eingebaute App-Registry .

Also in %code% , anstatt von Modellen zu importieren, verwenden Sie %code% , um Zugriff auf das Modell zu erhalten.

Ich mache das mit einer Hilfsmethode mit einer gesunden Dokumentation, nur um auszudrücken, warum das schmerzhaft ist:

%Vor%

Und dann:

%Vor%

Du könntest einfach %code% direkt verwenden.

    
___ tag123djangocellery ___ Django-Sellerie bietet Sellerie-Integration für Django. ___ tag123circularcompendency ___ circular Abhängigkeit ist eine Beziehung zwischen zwei oder mehr Modulen, die entweder direkt oder indirekt voneinander abhängig sind, um richtig zu funktionieren. ___ answer26382812 ___

In Ihren Modellen können Sie den %code% am Anfang der Datei importieren, bevor Sie ihn verwenden. Es löst das zirkuläre Importproblem.

%Vor%

Alternativ können Sie auch in Ihrem %code% dasselbe tun. Sie können Ihre Modelle unmittelbar vor der Verwendung importieren, anstatt sie zu beginnen.

Alternative:

Sie können die Methode %code% verwenden, um Ihre Aufgabe aufzurufen

%Vor%     
___
4
Antworten

MVC - zirkuläre Abhängigkeit

Ich brauche die Ansicht, um einen Verweis auf den Controller zu halten, weil er den Controller als Ereignis-Listener registrieren muss. Ich brauche den Controller, um einen Verweis auf die Ansicht zu halten, denn nach einem Klick auf die Schaltf...
02.06.2012, 19:29
3
Antworten

Circular Abhängigkeiten in StructureMap - können sie mit Property-Injektion gebrochen werden?

Ich habe die einfachste Art von zirkularer Abhängigkeit in der Strukturkarte - Klasse A stützt sich in ihrem Konstruktor auf Klasse B und Klasse B in ihrem Konstruktor auf Klasse A. Um die Abhängigkeit zu trennen, habe ich Klasse B dazu gebracht...
06.05.2010, 15:30
2
Antworten

Typedef Circular Abhängigkeit

Wie kann ich die folgende zirkuläre Abhängigkeit lösen? %Vor% Ich versuche, Objekte aus einer CAPI-Datenbankbibliothek in einem C ++ - Formular darzustellen. Diese Datenbank ermöglicht das Speichern von Werten oder Arrays von Werten sowie ei...
09.08.2012, 13:47
1
Antwort

Wie löst man die zirkuläre Abhängigkeit in Require.js?

Im Grunde genommen besteht die Idee darin, dass das "Sub" -Modul ein Objekt erstellt, und dieses Objekt sollte Teil einer Utilities-Bibliothek sein, die das "Haupt" -Modul ist. Jedoch hängt das "Unter" -Objekt von Dienstprogrammen von "main" ab...
17.06.2013, 11:18
1
Antwort

Visual Studio 2012 - Finden Sie kreisförmige Referenzen effizient

Wenn ich jetzt nach zirkulären Referenzen innerhalb einer Lösung suchen möchte, wähle ich Architecture - Generate Dependency Graph - For Solution . Dann wähle ich auf der neuen Registerkarte Layout - Analyzers - Circular References Analyzer...
27.02.2013, 10:29
4
Antworten

Python-Umlaufimport entfernen

user.py: %Vor% story.py %Vor% Wie Sie sehen können, gibt es in diesem Programm einen zirkulären Import, der ein ImportError verursacht. Ich habe gelernt, dass ich die Import-Anweisung in der Methodendefinition verschieben kann, um die...
15.11.2013, 07:49
2
Antworten

Vermeiden eines verschachtelten Service-Locator-Antipatterns mit DI / Autofac

Ich hatte in einem früheren Spielprojekt etwas von einem praktischen Service-Locator-Anti-Pattern. Ich möchte das durch die Abhängigkeitsinjektion ersetzen. autofac sieht für mich wie der wahrscheinlichste DI-Container aus, da er relevante Fun...
26.12.2013, 16:47
1
Antwort

Auflösen von zirkulären Abhängigkeiten mit Node.js erfordern und Klassen in CoffeeScript

Ich möchte wissen, ob es eine Möglichkeit gibt, idiomatisch Probleme mit zirkulären Abhängigkeiten von require von Node.js während der Verwendung von CoffeeScript-Klassen und super zu vermeiden. Angesichts der folgenden vereinfachten Coffe...
02.07.2014, 05:13
4
Antworten

Aufhebung der Kreisimporte in Sellerie und Django

Ich habe eine Django-App, die Sellerie verwendet, um einige Aufgaben zu entfernen. Hauptsächlich wird die Berechnung einiger Felder in einer Datenbanktabelle verschoben. Also, ich habe eine task.py: %Vor% Und in models.py %Vor% Nun wi...
15.10.2014, 09:28