title: How are daemon threads killed in python (2.7)
body: <p>What happens to daemon threads when the main thread exits?  How are they shut down? Is there a way the ensure that cleanup code is executed?</p>
  
  <p>Here's a sketch of the situation I have:</p>
  
  <pre><code>import os
  import subprocess
  import threading
  import glob
  import datetime
  
  def do_big_job(result='result.txt'):
      tmpfile = result+'.tmp'
      err = subprocess.call(['my_time_consuming_script', '-o', tmpfile])
      if err == 0:
          os.rename(tmpfile, result)
      else:
          os.remove(tmpfile) # process failed, clean up temp file
  
  
  
  def main():
      not_done = True
      update = 0
      while not_done:
  
          # we can see if new data are available,
          # and start a process to get/prep it
          if new_data_available():
              args = ('result{0:05}.txt'.format(update),)
              th = threading.Thread(target=do_big_job, args=args)
              update = update + 1
              th.daemon = True 
              th.start()
  
          # but we don't need/want to wait for that process
          # to complete before continuing to iterate
  
          currently_available = glob.glob('result*.txt')
          # &lt;snip&gt;
          # rest of loop just uses what is available,
          # we don't want/need to block for updated data
          # to meet other responsiveness requirements
  </code></pre>
  
  <p>I'd like to make sure that I don't leave any temporary files (or zombie processes) lying around if the main thread dies while one (or more) of the <code>do_big_job</code> threads are still running, but I also can't just set <code>daemon=False</code> since I cannot wait for them to complete when main exits.</p>