Kann ich Celery für eine Aufgabe verwenden, die eine externe Bibliothek aufruft, die Multiprocessing verwendet?Python

Python-Programme
Anonymous
 Kann ich Celery für eine Aufgabe verwenden, die eine externe Bibliothek aufruft, die Multiprocessing verwendet?

Post by Anonymous »

Ich hoffe, Celery zum Verwalten der Aufgabenwarteschlange für meine Anwendung verwenden zu können, und frage mich, ob es in der Lage ist, Aufgaben zu verwalten, die selbst Multiprocessing verwenden. Ich muss zum Beispiel eine Aufgabe ähnlich der folgenden verwenden:

Code: Select all

from celery import shared_task
# external library that uses multiprocessing
from mp_module import mp_func

@shared_task
def long_task(n_proc):
mp_func(n_proc) # takes a long time, but uses multiprocessing to speed it up
Ich habe festgestellt, dass die folgenden Fragen hilfreich, aber nicht direkt auf mein Ziel anwendbar sind:
  • Celery parallele verteilte Aufgabe mit Multiverarbeitung
  • Celery: Daemonische Prozesse dürfen keine Kinder haben
  • Threaded-Modul mit Celery ausführen; Daemonische Prozesse dürfen keine untergeordneten Prozesse haben.
Kurz gesagt scheinen die empfohlenen Optionen für eine Sellerie-Aufgabe mit Mehrfachverarbeitung folgende zu sein:
  • Teilen Sie die Sellerie-Aufgabe in separate Aufgaben auf, damit der Sellerie-Prefork-Pool selbst eine Mehrfachverarbeitung der Aufgabe durchführen kann, die ursprünglich eine Funktion war.
  • Verwenden Sie die Billard-Bibliothek anstelle von Multiprocessing innerhalb der Sellerie-Aufgabe.
  • Verwenden Sie das Argument -P threads des Workers (d. h. celery worker -P threads).
Soweit ich es verstehe, kann ich keine dieser drei Lösungen verwenden. Um (1) oder (2) anzuwenden, müsste ich den Quellcode ändern, was ich nicht tun kann. Ich könnte (3) tun, aber das wäre Threading statt der Verwendung mehrerer Kerne, was bedeutet, dass die Aufgabe viel länger dauern würde, da Celery sie auf einem einzelnen Kern verarbeiten würde.
Gibt es eine Möglichkeit, Celery so zu verwenden, dass es eine einzelne Aufgabe auf mehrere Worker aufteilen kann, wenn das Multiprocessing-Modul innerhalb dieser Aufgabe verwendet wird, ohne den Code umzugestalten? Wenn nicht, was wäre die einfachste Alternative für diese Art der hierarchischen Aufgabenverwaltung (Verwaltung mehrerer Aufgaben, die jeweils mehrere Prozesse ausführen)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post