Wenn dies eine idiotische Frage ist, entschuldige ich mich und meinen Kopf in Scham gehen verstecken, aber:Python/rq - Überwachung Arbeiter Status
ich rq bin mit Jobs in Python Schlange stehen. Ich möchte, dass es so funktioniert:
- Job A beginnt. Job A greift Daten über die Web-API zu und speichert sie.
- Job A läuft.
- Job A wird abgeschlossen.
- Nach Abschluss von A beginnt Job B. Job B prüft jeden von Job A gespeicherten Datensatz und fügt einige zusätzliche Antwortdaten hinzu.
- Nach Abschluss von Job B erhält der Benutzer eine E-Mail mit der Nachricht, dass der Bericht fertig ist.
Mein Code so weit:
redis_conn = Redis()
use_connection(redis_conn)
q = Queue('normal', connection=redis_conn) # this is terrible, I know - fixing later
w = Worker(q)
job = q.enqueue(getlinksmod.lsGet, theURL,total,domainid)
w.work()
Ich nahm meine beste Lösung 2 Arbeiter, ein Job-A und eine für B. Der Job B Arbeiter konnte Job A überwachen und haben war, als Job A wurde gemacht, fangen Sie an Job B.
Was ich nicht herausfinden kann, um mein Leben zu retten, ist, wie ich einen Arbeiter bekomme, um den Status eines anderen zu überwachen. Ich kann die Job-ID von Job A mit job.id abrufen. Ich kann den Worternamen mit w.name greifen. Aber haben Sie nicht die geringste Ahnung, wie ich diese Informationen an den anderen Arbeiter weitergebe.
Oder gibt es eine viel einfachere Möglichkeit, dies zu tun, die ich total vermisse?
Wenn Auftrag B nicht ausgeführt werden kann, bis Auftrag A abgeschlossen ist (was bedeutet, dass sie nicht parallel ausgeführt werden können), warum überhaupt rq verwenden? Tun Sie sie einfach sequentiell (in einem separaten Thread oder Prozess, wenn Sie Ihre Anwendung nicht blockieren wollen) –
Die Jobs für A und B dauern jeweils sehr lange und können getrennt passieren, also würde ich es gerne tun können Ich lasse viele Jobs A unabhängig von Job B laufen. Wenn es zu schwierig ist, kann ich mich ergeben. – user1066609
Haben Sie Paare von A und B, die zusammen passen, oder kann irgendein B von irgendeinem A abhängen? Weil in letzterem Fall ein Synchonisierungsproblem besteht. :-) –