title: Python join a process without blocking parent
body: <p>I'm writing a program that will watch a particular directory for new files containing download URLs. Once a new file is detected, it will create a new process to do the actual download while the parent continues to watch the directory. I'm using the <code>Process</code> interface from <code>multiprocessing</code>. The problem I have is that unless I call process.join() the child process is still running, but process.join() is a blocking function which defeats the purpose of creating the child to handle the actual download.</p>
  
  <p>My question is, is there a way to join the child process in a non-blocking manner which will allow the parent to keep doing its thing?</p>
  
  <p>Partial code:</p>
  
  <pre><code>def main(argv):
    # parse command line args
    ...
    # set up variables
    ...
    watch_dir(watch_dir, download_dir)
  
  
  def watch_dir(wDir, dDir):
    # Grab the current watch directory listing
    before = dict([(f, None) for f in os.listdir (wDir)])
  
    # Loop FOREVER
    while 1:
      # sleep for 10 secs
      time.sleep(10)
  
      # Grab the current dir listing
      after = dict([(f, None) for f in os.listdir (wDir)])
  
      # Get the list of new files
      added = [f for f in after if not f in before]
      # Get the list of deleted files
      removed = [f for f in before if not f in after]
  
      if added:
        # We have new files, do your stuff
        print "Added: ", ", ".join(added)
  
        # Call the new process for downloading
        p = Process(target=child, args=(added, wDir, dDir))
        p.start()
        p.join()
  
      if removed:
        # tell the user the file was deleted
        print "Removed: ", ", ".join(removed)
  
      # Set before to the current
      before = after
  
  def child(filename, wDir, dDir):
    # Open filename and extract the url
    ...
    # Download the file and to the dDir directory
    ...
    # Delete filename from the watch directory
    ...
    # exit cleanly
    os._exit(0)
  </code></pre>
  
  <p>The parent waits for the child to finish execution before continuing after <code>p.join()</code> which is (as far as I can tell) correct. But that defeats the whole purpose of creating the child. If I leave off <code>p.join()</code> then the child remains active and a <code>ps ax | grep</code> python give me 'python &lt;defunct&gt;'.</p>
  
  <p>I'd like the child to finish up what its doing and go away without holding up the parent. Is there a way to do it?</p>