So beenden Sie eine unendliche Schleife sicher in Python?

Ich habe ein Skript, das läuft auf einer Endlosschleife, und fügt die Dinge in eine Datenbank und nicht Dinge, die ich kann nicht aufhören auf halbem Weg durch, also kann ich nicht einfach Strg+C drücken und es zu stoppen.

Ich möchte in der Lage sein, um irgendwie zu stoppen eine while-Schleife, aber lassen Sie es zu beenden, es ist letzten iteration, bevor es Stoppt.

Lassen Sie mich klarstellen:

mein code sieht ungefähr so aus:

while True:
    does something
    does more things
    does more things

Ich möchte in der Lage sein, zu unterbrechen, die while-Schleife am Ende, oder am Anfang, aber nicht zwischen die Dinge zu tun, weil das wäre schlecht.

und ich will nicht, es zu Fragen, mich nach jeder iteration, ob ich den Vorgang fortsetzen möchten.

danke für die tollen Antworten, ich bin super dankbar aber meine Implementierung scheint nicht zu funktionieren:

def signal_handler(signal, frame):
        global interrupted
        interrupted = True

class Crawler():
    def __init__(self):
    # not relevent

    def crawl(self):
        interrupted = False
        signal.signal(signal.SIGINT, signal_handler)
        while True:
            doing things
            more things

            if interrupted:
                print("Exiting..")
                break

wenn ich drücken Sie Strg+c das Programm einfach immer weiter, ignoriert mich

  • Sie haben keine Möglichkeit zu bestimmen, in deinem Skript, wenn der Auftrag abgeschlossen ist (letzten)! Wenn Sie tun, dann verwenden Sie es in einem Zustand und verwenden eine break-Anweisung
  • Der job in diesem Fall ist ein web-crawler kann, als weiterzumachen auf unbestimmte Zeit. Ich möchte in der Lage sein zu sagen, es zu stoppen, kriecht aber nicht nur unterbrechen, es in der Mitte einer Seite zum Beispiel.
  • lassen Sie es zu beenden, es ist letzten iteration, bevor es Stoppt? Wie wissen Sie, wenn es getan hat, den job oder nicht?
  • das script crawlt Webseiten. es hat eine for-Schleife im inneren eine unendliche while-Schleife. Ich möchte in der Lage zu stoppen die unendliche while-Schleife, aber nicht während einer iteration der for-Schleife im inneren.
  • Hmm...könntest du der wichtige Teil des Skripts? Dies kann anderen helfen, zu verstehen, was Sie wollen 😛
  • Die Frage ist klar: Beenden Sie diese iteration der Schleife, die dann beendet wird. Und wer denkt, dass es off-topic?

InformationsquelleAutor davegri | 2015-10-03
Schreibe einen Kommentar