title: Python multiprocessing doesn't play nicely with uuid.uuid4()
body: <p>I'm trying to generate a uuid for a filename, and I'm also using the multiprocessing module.  Unpleasantly, all of my uuids end up exactly the same.  Here is a small example:</p>
  
  <pre><code>import multiprocessing
  import uuid
  
  def get_uuid( a ):
      ## Doesn't help to cycle through a bunch.
      #for i in xrange(10): uuid.uuid4()
  
      ## Doesn't help to reload the module.
      #reload( uuid )
  
      ## Doesn't help to load it at the last minute.
      ## (I simultaneously comment out the module-level import).
      #import uuid
  
      ## uuid1() does work, but it differs only in the first 8 characters and includes identifying information about the computer.
      #return uuid.uuid1()
  
      return uuid.uuid4()
  
  def main():
      pool = multiprocessing.Pool( 20 )
      uuids = pool.map( get_uuid, range( 20 ) )
      for id in uuids: print id
  
  if __name__ == '__main__': main()
  </code></pre>
  
  <p>I peeked into uuid.py's code, and it seems to depending-on-the-platform use some OS-level routines for randomness, so I'm stumped as to a python-level solution (to do something like reload the uuid module or choose a new random seed).  I could use uuid.uuid1(), but only 8 digits differ and I think there are derived exclusively from the time, which seems dangerous especially given that I'm <em>multiprocessing</em> (so the code could be executing at exactly the same time).  Is there some Wisdom out there about this issue?</p>