gpt4 book ai didi

python - 如何在线程 python 程序中捕获 SIGINT?

转载 作者:太空狗 更新时间:2023-10-29 17:33:31 26 4
gpt4 key购买 nike

当使用模块线程和类 Thread() 时,我无法捕获 SIGINT (Ctrl + C 在控制台中)无法被捕获。

为什么以及我能做什么?

简单的测试程序:

#!/usr/bin/env python

import threading

def test(suffix):
while True:
print "test", suffix

def main():
for i in (1, 2, 3, 4, 5):
threading.Thread(target=test, args=(i, )).start()

if __name__ == "__main__":
main()

当我按下 Ctrl + C 时,没有任何反应。

最佳答案

线程和信号不会混合。在 Python 中,情况比在外部更是如此:信号只会传递到一个线程(主线程);其他线程不会收到消息。除了主线程之外,您无法中断线程。它们不受您的控制。

您在这里唯一可以做的就是使用 queue 模块在主线程和您启动的任何线程之间引入一个通信 channel 。然后,您可以向该线程发送一条消息,并在它看到该消息时让它终止(或执行您想要的任何其他操作)。

或者,不使用线程通常是一个很好的选择。然而,使用什么在很大程度上取决于您要实现的目标。

关于python - 如何在线程 python 程序中捕获 SIGINT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853932/

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