2016-08-08 6 views
2

Есть ли способ в python прерывать поток, когда он спит? (Как мы можем это сделать в java)Python threading interrupt sleep

Я ищу что-то подобное.

import threading 
    from time import sleep 

    def f(): 
     print('started') 
    try: 
     sleep(100) 
     print('finished') 
    except SleepInterruptedException: 
     print('interrupted') 

t = threading.Thread(target=f) 
t.start() 

if input() == 'stop': 
    t.interrupt() 

Нить спит в течение 100 секунд, и если я типа «стоп», он прерывает

+1

Вы можете реализовать [Событие] (https://docs.python.org/3.5/library/threading.html#threading.Event) и использовать 'Event.wait (100)' –

+0

Loop through 100 'time. sleep (1) 'и проверить любые исключения –

+0

@Kristof thanks – PolyProgrammist

ответ

3

Правильный подход заключается в использовании threading.Event. Например:

import threading 

e = threading.Event() 
e.wait(timeout=100) # instead of time.sleep(100) 

В другом потоке, вам нужно иметь доступ к e. Вы можете прервать сон, выпустив:

e.set() 

Это немедленно прервет сон. Вы можете проверить возвращаемое значение e.wait, чтобы определить, было ли оно отключено или прервано. Для получения дополнительной информации см. Документацию: https://docs.python.org/3/library/threading.html#event-objects.