Heim >Backend-Entwicklung >Python-Tutorial >Sicherstellung einer fairen Verarbeitung mit Sellerie – Teil II
In diesem Artikel werden die Aufgabenprioritäten in Celery untersucht, aufbauend auf dem vorherigen Beitrag über faire Verarbeitung. Aufgabenprioritäten bieten eine Möglichkeit, die Fairness und Effizienz der Hintergrundverarbeitung zu verbessern, indem Aufgaben basierend auf benutzerdefinierten Kriterien unterschiedliche Prioritätsstufen zugewiesen werden.
Die Priorität auf Aufgabenebene bietet eine detaillierte Kontrolle über die Aufgabenausführung ohne komplexe Implementierung. Durch die Übermittlung aller Aufgaben an eine einzige Warteschlange mit zugewiesenen Prioritätswerten können Mitarbeiter Aufgaben entsprechend ihrer Dringlichkeit bearbeiten. Dies gewährleistet eine faire Abwicklung unabhängig vom Abgabezeitpunkt.
Wenn beispielsweise ein Mandant 100 Aufgaben einreicht und ein anderer kurz darauf 5, verhindert die Priorität auf Aufgabenebene, dass der zweite Mandant auf den Abschluss aller 100 Aufgaben wartet.
Dieser Ansatz weist dynamisch Prioritäten basierend auf der Aufgabenanzahl eines Mandanten zu. Die erste Aufgabe jedes Mandanten beginnt mit hoher Priorität, aber mit jeweils 10 gleichzeitigen Aufgaben nimmt die Priorität ab. Dadurch wird sichergestellt, dass Mieter mit weniger Aufgaben keine unnötigen Verzögerungen erleben.
Installieren Sie zunächst Celery und Redis:
Konfigurieren Sie Celery so, dass Redis als Broker verwendet wird und die prioritätsbasierte Aufgabenverarbeitung aktiviert wird:
Definieren Sie eine Methode zur Berechnung der dynamischen Priorität mithilfe von Redis, um die Aufgabenanzahl jedes Mandanten zwischenzuspeichern:
Erstellen Sie eine benutzerdefinierte Aufgabenklasse, um die Aufgabenanzahl nach erfolgreichem Abschluss zu verringern:
Lösen Sie Aufgaben für verschiedene Mandanten aus und stellen Sie sicher, dass die Tenant_ID in den Schlüsselwortargumenten der Aufgabe enthalten ist:
Den vollständigen Code können Sie hier sehen.
Starten Sie den Sellerie-Worker und lösen Sie die Aufgaben aus:
Dieses Setup zeigt, wie die Prioritätswarteschlange von Celery in Kombination mit Redis eine faire Aufgabenverarbeitung gewährleistet, indem sie Prioritäten basierend auf der Mandantenaktivität dynamisch anpasst. Sehen wir uns eine vereinfachte Ausgabe des Workers an:
Aufgabenebenenpriorität mit Celery und Redis bietet eine robuste Lösung zur Gewährleistung einer fairen Verarbeitung in mandantenfähigen Systemen. Durch die dynamische Zuweisung von Prioritäten und die Nutzung einer einzigen Warteschlange können Sie die Einfachheit wahren und gleichzeitig die Geschäftsanforderungen erfüllen.
Es gibt viele Möglichkeiten, die Priorität auf Aufgabenebene zu implementieren. Die Verwendung von RabbitMQ ist beispielsweise effizienter, da es die Priorität im Kern unterstützt. Da wir aber auch Redis für die Aufgabenzählung verwenden, vereinfacht es unsere Gesamtarchitektur.
Ich hoffe, Sie finden das nützlich und sehen es beim nächsten Mal!
Das obige ist der detaillierte Inhalt vonSicherstellung einer fairen Verarbeitung mit Sellerie – Teil II. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!