views:

51

answers:

1

I'm running this my simple code:

import threading, time

class reqthread ( threading.Thread ):
  def __init__ (self):
    threading.Thread.__init__(self)

  def run ( self ):
    for i in range(0,10):
      time.sleep(1)
      print '.'

try:
  thread=reqthread()
  thread.start()
except (KeyboardInterrupt, SystemExit):
  print '\n! Received keyboard interrupt, quitting threads.\n'

But when i run it, it prints

$ python prova.py
. . ^C. . . . . . . . Exception KeyboardInterrupt in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored

In fact python thread ignore my cntrl+c keyboard interrupt and doesn't print 'Reiceived Keyboard Interrupt'. Why? What is wrong with this code?

Thank you in advance

+3  A: 

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.

unutbu