2017-01-16 7 views
1

У меня есть простой вызов к теме:Killing нить не работает

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

, а затем я начинаю его (aThread.start)

, когда мне нужно, чтобы остановить поток я:

aThread.join() 

но нить продолжает работать .. Помогите?

+0

Вы просто не можете остановить потоки, используя API 'threading', вам нужно реализовать свои собственные алгоритмы для этого. 'join' просто ждет выхода потока, блокируя текущий поток, поэтому он не посылает какой-либо сигнал на' aThread', говоря ему, чтобы он завершился. – ForceBru

+0

Возможный дубликат [Есть ли способ убить нить в Python?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) – Tagc

+0

«join» не «убивает». Вызов '.join()' просто означает, что один поток будет ждать другого. – dsh

ответ

1

Если вы хотите остановить поток, вы должны либо убить, либо пропустить нить. Это SO answer и это SO answer дело с остановкой нити. Метод join ожидает завершения потока.

В целом, чтобы потоковая остановка прекрасна изящно, полезно иметь канал связи с ней, чтобы можно было передавать сообщение/сигнал остановки.

1

Поток будет продолжать работать до тех пор, пока не будет вызван вызываемый singleDriverThread.

Пример:

Если ваш вызываемая singleDriverThread выглядит следующим образом код никогда не остановится:

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

Но если singleDriverThread вместо выглядит следующим образом:

def singleDriverThread(): 
    # do stuff 
    return 

то вызываемая вернется и поток присоединится к остальной части вашего кода.