我有以下两个主题:
myThread = threading.Thread(target=sender.mainloop.run, daemon=True)
myThread.start()
myThread2 = threading.Thread(target=receiver.mainloop.run, daemon=True)
myThread2.start()
目标是GObject.Mainloop()方法。 之后我的主程序处于无限循环中。
我的问题是当CTRL-C终止执行时,会为两个线程引发Keyboardexception,但主程序不会终止。
任何想法如何通过CTRL-C终止主程序和两个线程?
答案 0 :(得分:5)
ctrl-c发出一个SIGINT信号,您可以在主线程中捕获该信号以进行回调。然后,您可以在回调中运行所需的任何关闭代码,可能是sender/receiver.mainloop.quit()
或其他内容。
import threading
import signal
import sys
def loop():
while True:
pass
def exit(signal, frame):
sys.exit(0)
myThread = threading.Thread(target=loop)
myThread.daemon = True
myThread.start()
myThread2 = threading.Thread(target=loop)
myThread2.daemon = True
myThread2.start()
signal.signal(signal.SIGINT, exit)
loop()