Ich habe eine periodische Aufgabe, die ich in heroku procfile mit worker:
implementiereProcile
%Vor%tasks.py
%Vor% Für diese periodische Aufgabe benötige ich den --beat (Ich habe es überprüft, indem ich es ausgeschaltet habe und die Aufgabe nicht wiederhole). In gewisser Weise macht das --beat
die Arbeit einer Uhr ( Ссылка ) )
Meine Sorge ist: Wenn ich den Worker heroku ps:scale worker=2
auf 2x Dynos skaliere, sehe ich, dass zwei Beats auf worker.1 und worker.2 aus den Logs laufen:
Das angezeigte Protokoll ist für eine andere periodische Aufgabe, aber der Schlüsselpunkt ist, dass beide Arbeiter-Dynoden Signale erhalten, um die gleiche Aufgabe von ihren jeweiligen Uhren zu erledigen, während tatsächlich eine Uhr tickt und nach jeder XX Sekunden entscheidet, was zu tun ist, und gibt diese Aufgabe dem am wenigsten belasteten worker.n
dyno
Mehr darüber, warum eine einzelne Uhr essentiell ist, finden Sie hier: Ссылка
Ist das ein Problem und wie kann man dies vermeiden, wenn ja?
Sie sollten einen separaten Arbeiter für den Beat-Prozess haben.
%Vor%Jetzt können Sie die Worker-Aufgabe skalieren, ohne den Beat zu beeinflussen.
Wenn Sie den zusätzlichen Prozess nicht immer benötigen, können Sie alternativ weiterhin "B" in der Worker-Aufgabe verwenden, aber auch eine zweite Aufgabe, z. B. "extra_worker", die normalerweise auf "0" gesetzt ist Wenn nötig, skalieren. Wichtig ist, die Aufgabe immer mit dem Takt bei 1 Prozess zu halten
Tags und Links django multithreading celery heroku clock