2016-08-08 22 views
2

スレッドがスリープしているときにスレッドを中断する方法はありますか? (私たちは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

[Event](https://docs.python.org/3.5/library/threading.html#threading.Event)を実装し、 'Event.wait(100)' –

+0

Loop through 100 'の時間を使用できます。 sleep(1) 'と例外をチェックする –

+0

@Kristofありがとう – 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のマニュアルを参照してください。