/ / Modul importiert mehrmals mit Django + Sellerie - Python, Django, Sellerie, Django-Sellerie

Modul importiert mehrmals mit Django + Sellerie - Python, Django, Sellerie, Django-Sellerie

Ich habe ein Modul, das teuer zu importieren istbeinhaltet das Herunterladen einer ~ 20MB-Indexdatei, die von einem Selleriearbeiter verwendet wird. Leider kann ich nicht herausfinden, wie man das Modul nur einmal und nur vom Sellerie-Arbeiter importieren lassen kann.

Version 1 tasks.py Datei:

import expensive_module

@shared_task
def f():
expensive_module.do_stuff()

Wenn ich die Datei auf diese Weise organisiere, wird das teure Modul sowohl vom Webserver als auch von der Sellerie-Instanz importiert, was ich seit dem Jahr 2000 erwarte tasks Modul wird in beiden importiert und sie sind Differenzprozesse.

Version 2 tasks.py Datei:

@shared_task:
def f():
import expensive_module
expensive_module.do_stuff()

In dieser Version importiert der Webserver niemals das Modul (was gut ist), aber das Modul wird jedes Mal vom Selleriearbeiter wieder importiert f.delay() wird genannt. Das ist es, was mich wirklich verwirrt. Warum wird das Modul in diesem Szenario jedes Mal neu importiert, wenn diese Funktion vom Selleriearbeiter ausgeführt wird? Wie kann ich diesen Code neu organisieren, damit nur der Selleriearbeiter das teure Modul importiert und das Modul nur einmal importiert wird?

Als Folge, weniger wichtige Frage, in Version 1 der tasks.py Datei, warum importiert die Web-Instanz das teure Modul zweimal? Beide Male ist es eine importierte Form urls.py wenn Django läuft self._urlconf_module = import_module(self.urlconf_name).

Antworten:

0 für die Antwort № 1

Erstellen Sie eine doppelte tasks.py-Datei für den Webserver mit leeren Aufgaben und nicht benötigten Importen.

Verwenden Sie für Sellerie Version 1, in der Sie nur einmal statt jedes Mal, wenn Sie diese Aufgabe aufrufen, importieren.

War dort und es funktioniert.