与main一起终止GObject.Mainloop()线程

Zor*_*duk 9 python pygobject python-3.x

我有以下两个主题:

myThread = threading.Thread(target=sender.mainloop.run, daemon=True)
myThread.start()

myThread2 = threading.Thread(target=receiver.mainloop.run, daemon=True)
myThread2.start()
Run Code Online (Sandbox Code Playgroud)

目标是GObject.Mainloop()方法.之后我的主程序处于无限循环中.

我的问题是当CTRL-C终止执行时,两个线程都会引发Keyboardexception,但主程序不会终止.

任何想法如何主要程序和两个线程都可以通过CTRL-C终止?

Jam*_*mes 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()  
Run Code Online (Sandbox Code Playgroud)