5

Python で interrupt_main() メソッドがどのように機能するかを説明できる人はいますか?

私はこのPythonコードを持っています:

import time, thread

def f():
    time.sleep(5)
    thread.interrupt_main()

def g():
    thread.start_new_thread(f, ())
    time.sleep(10)
print time.time()
try:
    g()
except KeyboardInterrupt:
    print time.time()

そして、実行しようとすると、次の出力が得られます。

1380542215.5
# ... 10 seconds break...
1380542225.51

ただし、プログラムを手動で中断すると (CTRL-C)、スレッドは正しく中断されます。

1380542357.58
^C1380542361.49

最初の例で、スレッドの中断が 10 秒 (5 秒ではなく) 後にのみ発生するのはなぜですか?

古いスレッド n Python メーリング リストを見つけましたが、ほとんど何も説明していません。

4

1 に答える 1

7

raise KeyboardInterruptを中断しませんtime.sleep()。前者は完全に Python インタープリター内で処理され、後者はオペレーティング システム関数を呼び出します。

したがって、あなたの場合、キーボード割り込みは処理されましたが、time.sleep()システムコールが完了したときのみです。

代わりにこれを試してください:

def g():
    thread.start_new_thread(f, ())
    for _ in range(10): 
        time.sleep(1)
于 2013-09-30T15:40:39.460 に答える