gpt4 book ai didi

python - 无法使用 Ctrl-C 终止 Python 脚本

转载 作者:IT老高 更新时间:2023-10-28 12:23:33 28 4
gpt4 key购买 nike

我正在使用以下脚本测试 Python 线程:

import threading

class FirstThread (threading.Thread):
def run (self):
while True:
print 'first'

class SecondThread (threading.Thread):
def run (self):
while True:
print 'second'

FirstThread().start()
SecondThread().start()

这是在 Kubuntu 11.10 上的 Python 2.7 中运行的。 Ctrl+C 不会杀死它。我还尝试为系统信号添加处理程序,但这没有帮助:

import signal 
import sys
def signal_handler(signal, frame):
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)

为了杀死进程,我在使用 Ctrl+Z 将程序发送到后台后通过 PID 杀死它,这不会被忽略。为什么 Ctrl+C 会被如此持久地忽略?我该如何解决这个问题?

最佳答案

Ctrl+C 会终止主线程,但是由于您的线程未处于守护程序模式,它们会继续运行,从而使进程保持事件状态。我们可以让它们成为守护进程:

f = FirstThread()
f.daemon = True
f.start()
s = SecondThread()
s.daemon = True
s.start()

但是还有另一个问题——一旦主线程启动了你的线程,它就没有其他事情要做了。所以它退出了,线程立即被销毁。所以让我们保持主线程活着:

import time
while True:
time.sleep(1)

现在它将保持打印“第一”和“第二”,直到您点击 Ctrl+C

编辑:正如评论者所指出的,守护线程可能没有机会清理诸如临时文件之类的东西。如果需要,请在主线程上捕获 KeyboardInterrupt 并让它协调清理和关闭。但在很多情况下,让守护线程突然死掉可能就足够了。

关于python - 无法使用 Ctrl-C 终止 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815947/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com