threading ignores KeyboardInterrupt exception threading ignores KeyboardInterrupt exception python python

threading ignores KeyboardInterrupt exception


Try

try:  thread=reqthread()  thread.daemon=True  thread.start()  while True: time.sleep(100)except (KeyboardInterrupt, SystemExit):  print '\n! Received keyboard interrupt, quitting threads.\n'

Without the call to time.sleep, the main process is jumping out of the try...except block too early, so the KeyboardInterrupt is not caught. My first thought was to use thread.join, but that seems to block the main process (ignoring KeyboardInterrupt) until the thread is finished.

thread.daemon=True causes the thread to terminate when the main process ends.


To summarize the changes recommended in the comments, the following works well for me:

try:  thread = reqthread()  thread.start()  while thread.isAlive():     thread.join(1)  # not sure if there is an appreciable cost to this.except (KeyboardInterrupt, SystemExit):  print '\n! Received keyboard interrupt, quitting threads.\n'  sys.exit()


Slight modification of ubuntu's solution.

Removing tread.daemon = True as suggested by Eric and replacing the sleeping loop by signal.pause():

import signaltry:  thread=reqthread()  thread.start()  signal.pause() # instead of: while True: time.sleep(100)except (KeyboardInterrupt, SystemExit):  print '\n! Received keyboard interrupt, quitting threads.\n'