title: Python threading.thread.start() doesn't return control to main thread
body: <p>I'm trying to a program that executes a piece of code in such a way that the user can stop its execution at any time without stopping the main program. I thought I could do this using threading.Thread, but then I ran the following code in IDLE (Python 3.3):</p>
  
  <pre><code>from threading import *
  import math
  def f():
      eval("math.factorial(1000000000)")
  t = Thread(target = f)
  t.start()
  </code></pre>
  
  <p>The last line doesn't return: I eventually restarted the shell. Is this a consequence of the Global Interpreter Lock, or am I doing something wrong? I didn't see anything specific to this problem in the threading documentation (<a href="http://docs.python.org/3/library/threading.html" rel="nofollow">http://docs.python.org/3/library/threading.html</a>)</p>
  
  <p>I tried to do the same thing using a process:</p>
  
  <pre><code>from multiprocessing import *
  import math
  def f():
      eval("math.factorial(1000000000)")
  
  p = Process(target = f)
  p.start()
  p.is_alive()
  </code></pre>
  
  <p>The last line returns False, even though I ran it only a few seconds after I started the process! Based on my processor usage, I am forced to conclude that the process never started in the first place. Can somebody please explain what I am doing wrong here?</p>