Wie zum starten und beenden thread?
Sorry für die alte Frage. Ich habe geklärt. Wie kann ich ein stop thread mit meinen Armen thread-Klasse?
BEARBEITEN: Es ist in der Schleife, I want to restart es wieder an den Anfang des Codes. Wie kann ich start-beenden-neu starten-beenden-neu starten?
Meiner Klasse:
import threading
class Concur(threading.Thread):
def __init__(self):
self.stopped = False
threading.Thread.__init__(self)
def run(self):
i = 0
while not self.stopped:
time.sleep(1)
i = i + 1
In der Haupt-code, die ich will:
inst = Concur()
while conditon:
inst.start()
#after some operation
inst.stop()
#some other operation
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist David Heffernan Idee prall-out. Das Beispiel unten läuft für 1 Sekunde, dann Stoppt für 1 Sekunde, dann läuft für 1 Sekunde, und so weiter.
Kann man eigentlich nicht stoppen und dann neu starten einen thread, da kann man nicht anrufen, seine
start()
wieder nach seinerrun()
- Methode wurde beendet. Allerdings können Sie eine einzustellen und eine spätere Wiederaufnahme der Ausführung durch die Verwendung einesthreading.Bedingung
variable zu vermeiden, concurrency-Probleme beim prüfen oder ändern Ihren Zustand ausgeführt werden.threading.Condition
Objekte zugeordnet sind,threading.Lock
Objekt und Methoden, um zu warten, bis es veröffentlicht und benachrichtigt alle wartenden threads, wenn das Auftritt. Hier ist ein Beispiel, abgeleitet aus dem code in deiner Frage, die zeigt diesen Vorgang. In dem Beispiel code, ich habe dieCondition
variable TeilThread
Unterklasse-Instanzen, um eine bessere Kapselung der Implementierung und vermeiden benötigen, um die Einführung eines zusätzlichen globalen Variablen:Die Umsetzung der
stop()
würde wie folgt Aussehen:Wenn Sie neu starten möchten, dann können Sie einfach eine neue Instanz erstellen und start.
Den Dokumentation für
Thread
macht deutlich, dass diestart()
Methode kann nur aufgerufen werden, einmal für jede Instanz der Klasse.Wenn Sie anhalten möchten, und wieder ein thread, dann werden Sie brauchen, um eine Bedingung variable.