title: Python: How to terminate a blocking thread
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python">Is there any way to kill a Thread in Python?</a>  </p>
  </blockquote>
  
  
  
  <p>So this question is a follow up to a solution posted previously.  Basically it deals with programatically terminating a thread:  <a href="http://sebulba.wikispaces.com/recipe+thread2" rel="nofollow noreferrer">http://sebulba.wikispaces.com/recipe+thread2</a></p>
  
  <p>However it doesnt work... and I was wondering if someone can explain how one could terminate a thread that is blocking? My only guess is the fact that I am not providing the right thread id, but I did some testing and am pretty sure I can just use iden</p>
  
  <p>If it is the thread ID, how can I go about getting the correct Thread ID? </p>
  
  <p>Test Code: </p>
  
  <pre><code>class BlockingTestThread(Thread):
  
      def __init__(self):
          self._running_flag = False
          Thread.__init__(self, target=self.test_method)
  
      def test_method(self):
          try:
              while(not self.stopped()):
                  self._running_flag = True
                  time.sleep(100)
          finally:
                  self._running_flag = False
  
  
  def _async_raise(tid, exctype):
      '''Raises an exception in the threads with id tid'''
      if not inspect.isclass(exctype):
          raise TypeError("Only types can be raised (not instances)")
  
      res = ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(tid), ctypes.py_object(exctype))
      time.sleep(0.1)
  
  
  
  if __name__ == "__main__":
      thread = BlockingTestThread()
      thread.start()
  
      _async_raise(thread.ident, SystemExit)
      print "Joining thread"
      thread.join()
      print "Done Joining thread"
      #will never get here!
  </code></pre>