2017-01-16 2 views
1

ich einen einfachen Anruf zu einem Thread:einen Thread Töten funktioniert nicht

aThread = threading.Thread(target=singleDriverThread, args=(d[0])) 

und dann habe ich es starten (aThread.start)

wenn ich den Thread stoppen muss ich tun:

aThread.join() 

aber der Thread weiterlaufen .. Hilfe?

+0

Sie können nicht einfach Threads mit 'threading' API stoppen, Sie müssen Ihre eigenen Algorithmen dafür implementieren. 'Join' wartet nur darauf, dass der Thread beendet wird, und blockiert den aktuellen Thread, so dass er kein Signal an" aThread "sendet und ihm sagt, dass er terminieren soll. – ForceBru

+0

Mögliches Duplikat von [Gibt es eine Möglichkeit, einen Thread in Python zu beenden?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) – Tagc

+0

"Join" ist nicht "Kill". Der Aufruf von '.join()' bedeutet nur, dass der eine Thread auf den anderen wartet. – dsh

Antwort

1

Wenn Sie einen Thread stoppen möchten, sollten Sie den Thread entweder abbrechen oder signalisieren. Diese SO answer und diese SO answer befassen sich mit dem Anhalten des Threads. Die Methode join wartet nur auf das Beenden des Threads.

Im Allgemeinen ist es sinnvoll einen Kommunikationskanal zu haben, damit ein Thread ordnungsgemäß gestoppt werden kann, damit eine Stopp-Nachricht/ein Stoppsignal gesendet werden kann.

1

Der Thread wird weiter ausgeführt, bis die aufrufbare singleDriverThread zurückgibt.

Beispiel:

Wenn Ihr aufrufbar singleDriverThread sieht wie folgt aus der Code wird nie aufhören:

def singleDriverThread(): 
    while True: 
     # do stuff in eternal loop 
     pass 

Aber wenn singleDriverThread sieht stattdessen wie folgt aus:

def singleDriverThread(): 
    # do stuff 
    return 

dann die abrufbaren zurückkehren und der Thread wird mit dem Rest des Codes verbunden.

Verwandte Themen