Ich habe Aufgaben in einer Kette mit drei Aufgaben fetch_page, check_source und Store-SeiteSellerie Aufruf andere Funktion und weiterhin die Verkettung
def update_page_info(**headers):
chain=fetch_page.s(headers['key']) | check_source.s(headers['key_1']) | store_info.s()
chain().apply_async()
fetch_page die Seite abruft und sammelt, was es sammeln muss:
@app.task(bind=True)
def fetch_page(self,url):
#fetch_page here and return a tuple so that it can be unpacked
# dosomething
Nach dem Abrufen der Seite wird nun in den nächsten Aufgaben check_source nach der Quelle gesucht.
so die Verwirrung ist kann ich einige andere Aufgaben von hier aufrufen ?? Wird es Unstimmigkeiten geben oder wird der Arbeiter jemals in eine Sackgasse geraten?
Und schließlich sollte es ausführen store_info(), die von check_source nur speichern Dinge zurückgegeben würden()
@app.task(bind=True)
def store_info(self,result):
print ("store_info ")
try:
#store the fetched pages
except Exception as exc:
#dosomething
finally:
pass
Ich war nach diesem Ansatz, der nur wenig Änderung erforderlich http://docs.celeryproject.org/en/latest/userguide/tasks.html#avoid-launching-synchronous-subtasks.
Kann jemand mir vorschlagen, wie es gemacht werden sollte und Dinge, um die ich vorsichtiger sein muss?
Ich habe dies und seine Arbeitsdatei bisher für einige Aufgaben getestet, nur besorgt, wenn Arbeiter überlastet werden, ich denke, ich muss es mit einigen weiteren Aufgaben testen. Vielen Dank. – ashim888
Testen ist ein guter Anfang! Erlaubt Ihr Szenario, dass mehrere Mitarbeiter dieselbe Aufgabe gleichzeitig ausführen können? Wenn dies ein Problem ist, müssen Sie sicherstellen, dass nur eine Aufgabe gleichzeitig ausgeführt werden kann. Sie können dies mit einem Mutex/Semaphor tun, den Ihre Selleriearbeiterprozesse teilen. Was genau versuchen Sie zu tun? – deeb
Für den Moment verwende ich nur einen Arbeiter, um die gleiche Aufgabe auszuführen. Ich plane, 2/3 Arbeiter zu benutzen und Mutex/Semaphor nicht zu wissen. Ich versuche nur zu crawlen und die Ergebnisse zu speichern. – ashim888