title: How to handle exception in threading with queue in Python?
body: <p>This is never print:
  "Exception in threadfuncqueue handled by threadfuncqueue", 
  "Exception in threadfuncqueue handled by main thread" and 
  "thread test with queue passed". Never quitting!</p>
  
  <pre><code>from threading import Thread
  from Queue import Queue
  import time
  
  class ImRaiseError():
      def __init__(self):
          time.sleep(1)
          raise Exception(self.__class__.__name__)
  
  # place for paste worked code example from below 
  
  print "begin thread test with queue"
  def threadfuncqueue(q):
      print "\n"+str(q.get())
      while not q.empty():
          try:
              testthread = ImRaiseError()
          finally:
              print "Exception in threadfuncqueue handled by threadfuncqueue"
  
  q = Queue()
  items = [1,2]
  for i in range(len(items)):
       t = Thread(target=threadfuncqueue,args=(q,))
       if(1 == i):
          t.daemon = False
       else:
          t.daemon = True
       t.start()
  for item in items:
      q.put("threadfuncqueue"+str(item))
  
  try:
      q.join()       # block until all tasks are done
  finally:
      print "Exception in threadfuncqueue handled by main thread"
  print "thread test with queue passed"
  quit()
  </code></pre>
  
  <p>How handle this exception?</p>
  
  <p>Example of worked code, but without queue:</p>
  
  <pre><code>print "=========== procedure style test"
  def threadfunc(q):
      print "\n"+str(q)
      while True:
          try:
              testthread = ImRaiseError()
          finally:
              print str(q)+" handled by process"
  
  try:
      threadfunc('testproc')
  except Exception as e:
      print "error!",e
  print "procedure style test ==========="
  
  
  print "=========== simple thread tests"
  testthread = Thread(target=threadfunc,args=('testthread',))
  testthread.start()
  try:
      testthread.join()
  finally:
      print "Exception in testthread handled by main thread"
  testthread1 = Thread(target=threadfunc,args=('testthread1',))
  testthread1.start()
  try:
      testthread1.join()
  finally:
      print "Exception in testthread1 handled by main thread"
  print "simple thread tests ==========="
  </code></pre>