22

PythonでCtrl+でプロセスの実行を止めたいです。しかし、例外はメインスレッドでのみ発生するCことをどこかで読んだことがあります。KeyboardInterruptまた、子スレッドの実行中にメインスレッドがブロックされることも読みました。では、どうすれば子スレッドを強制終了できますか?

たとえば、次のコードではCtrl+は効果がありません。C

def main():
    try:
        thread = threading.Thread(target=f)
        thread.start()  # thread is totally blocking (e.g. while True)
        thread.join()
    except KeyboardInterrupt:
        print "Ctrl+C pressed..."
        sys.exit(1)

def f():
    while True:
        pass  # do the actual work
4

3 に答える 3

13

CTRL参加中にメインスレッドに+シグナルを受信させたい場合は、呼び出しCにタイムアウトを追加することで実行できますjoin()

daemon=True以下は機能しているようです ( main を実際に終了させたい場合は 、追加することを忘れないでください):

thread1.start()
while True:
    thread1.join(600)
    if not thread1.isAlive():
        break
于 2012-01-14T19:03:45.257 に答える
10

問題は、を使用していることですthread1.join()。これにより、プログラムはそのスレッドの続行が終了するまで待機します。

シグナルは常にメインプロセスによってキャッチされます。これは、シグナルを受信するプロセスであり、スレッドを持つプロセスであるためです。

あなたが示すようにそれを行うと、あなたは基本的にスレッド機能のない「通常の」アプリケーションを実行しています。1つのスレッドを開始し、それが終了するまで続行するのを待ちます。

于 2011-01-20T16:11:54.167 に答える