Meine Arbeitsstationsklasse
%Vor% Ich entferne einen bestimmten Job aus der Warteschlange wie diesen
Aber ich würde gerne aufhören zu laufen und neu starten, wie würde ich das machen?
Wenn Sie einen laufenden Job töten / stoppen möchten, ohne ihn als fehlgeschlagenen Job zu markieren, können Sie diesen Hack verwenden.
%Vor%Nun, wo Sie diesen Code stoppen wollen, erreichen Sie einfach den Mitarbeiter, der gerade den Job ausführt, den Sie stoppen möchten. und töte seinen Kindprozess. Etwas wie den Enkelprozess von Worker zu töten.
Erläuterung:
Ein Worker forkiert einen untergeordneten Prozess, in dem die Funktion ausführen seinen Code ausführt. Wenn wir diesen untergeordneten Prozess direkt beenden, wird dieser Job gestoppt, aber als fehlgeschlagener Job markiert. Aus diesem Grund haben wir in self.perform einen weiteren Child-Prozess gegabelt und nun wird der laufende Prozess abgebrochen, um den laufenden Job zu stoppen. Außerdem wird er nicht als fehlgeschlagen markiert. Jetzt können wir den Job wieder in die Warteschlange stellen. Die Aufgabe besteht also darin, den Mitarbeiter zu erreichen, der die Aufgabe erledigt, die wir stoppen müssen (._. ")
Ich habe das geschafft, indem ich diesen Code für ein UNIX-basiertes System geschrieben habe:
%Vor%Tags und Links ruby-on-rails resque delayed-job