Ich habe ziemlich Standard Django + Rabbitmq + Sellerie Setup mit 1 Sellerie Aufgabe und 5 Arbeiter.
Aufgabe lädt dieselbe (ich vereinfache ein bisschen) große Datei (~ 100MB) asynchron zu einer Anzahl von entfernten PCs.
Alles funktioniert auf Kosten von viel Speicher, da jeder Task / Arbeiter diese große Datei in den Speicher lädt.
Was ich tun möchte, ist eine Art Cache zu haben, der für alle Aufgaben zugänglich ist, d. h. die Datei nur einmal laden. Django Caching basierend auf Locmem wäre perfekt, aber wie Dokumentation sagt: "Jeder Prozess wird seine eigene private Cache-Instanz haben" und ich brauche diesen Cache für alle Arbeiter zugänglich.
Versucht, mit Selleriesignalen zu spielen, wie in # 2129820 , aber das ist nicht was ich brauche.
Die Frage ist also: Gibt es eine Möglichkeit, etwas Globales in Sellery zu definieren (wie eine Klasse, die auf dem Diktat basiert, wo ich die Datei oder SMS laden könnte). Oder gibt es einen Django-Trick, den ich in dieser Situation anwenden könnte?
Danke.
Warum streamen Sie nicht einfach die Uploads von der Festplatte, anstatt die gesamte Datei in den Speicher zu laden?
Vielleicht können Sie Threads anstelle von Prozessen für diese spezielle Aufgabe verwenden. Da Threads alle den gleichen Speicher teilen, benötigen Sie nur eine Kopie der Daten im Speicher, aber Sie erhalten trotzdem eine parallele Ausführung. (Dies bedeutet, Sellerie für diese Aufgabe nicht zu verwenden)
Tags und Links python django celery caching global-variables