Hier ist ein vereinfachter Code, der python3-Coroutine verwendet und den Handler für SIGING- und SIGTERM-Signale zum ordnungsgemäßen Stoppen des Jobs setzt:
%Vor%Wenn ich es über:
ausführe %Vor%Es stoppt mit Strg-C ohne Warnungen. Aber wenn ich es über:
%Vor%Es gibt eine Warnung mit Strg-C aus:
%Vor%Die gleiche Warnung bekomme ich, wenn ich dieses Skript über:
installiere %Vor%Meine Python-Version ist "3.4.2"
Ok. Ich denke, ich habe herausgefunden, wie ich alle Aufgaben stoppen soll.
Und in einigen Fällen bekomme ich diesen Fehler: TypeError: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object
.
Ich habe einige Themen zu diesem Fehler gefunden:
Sie alle sagen, dass es durch Schließen der Schleife behoben werden kann, bevor die Anwendung beendet wird.
So bekommen wir diesen Code:
%Vor%Es funktioniert auch mit signal.signal . Aber wie Vincent bemerkte loop.add_signal_handler sieht in diesem Fall besser aus.
Aber ich bin mir immer noch nicht sicher, ob das der beste Weg ist, um alle Aufgaben zu stoppen.
Verwenden Sie anstelle von asyncio.wait
:
Annullierung: Wenn die äußere Zukunft annulliert wird, werden auch alle Kinder annulliert, die noch nicht abgeschlossen sind.
Beispiel:
%Vor%Tags und Links python-3.x python-asyncio coroutine