2013-04-17 8 views
7

Wie kann ich einen laufenden Prozess beenden, angefangen mit concurrent.futures? Wie ich es verstehe, ist die cancel() Methode da, um einen Prozess aus der Warteschlange zu entfernen, wenn er nicht ausgeführt wird. Aber was ist mit dem Töten eines laufenden Prozesses? Zum Beispiel, wenn ich einen lange laufenden Prozess habe, und ich möchte es stoppen, wenn ich eine Abbrechen-Schaltfläche in einer GUI drücke.Gibt es eine Möglichkeit, einen laufenden Prozess in concurrent.futures zu stoppen?

Antwort

0

In diesem Fall wäre es wahrscheinlich besser, eine multiprocessing.Process für eine lange laufende Aufgabe zu verwenden.

Erstellen Sie eine multiprocessing.Eventvor Starten des neuen Prozesses. Lassen Sie den Kindprozess den Status dieser Event regelmäßig überprüfen und beenden Sie ihn, wenn Event.is_set()True zurückgibt.

In Ihrem GUI-Code muss der Callback mit der Schaltfläche set() auf dem Event verbunden sein.

0

Sie können sich meine Antwort auf eine verwandte StackOverflow-Frage here ansehen.

Kurz gesagt, es scheint keine einfache Möglichkeit zu sein, einen laufenden Prozess innerhalb einer concurrent.futures.ProcessPoolExecutor abzubrechen. Aber Sie können es in einer Hacky Weise erreichen, indem Sie die Kindprozesse manuell beenden.

Verwandte Themen