spacepaste

  1.  
  2. from Queue import Queue
  3. from multiprocessing import Process
  4. class Multiprocess(object):
  5. """Cute decorator to run a function in multiple processes."""
  6. def __init__(self, func):
  7. self.func = func
  8. self.processes = []
  9. def __call__(self, *args, **kwargs):
  10. num_processes = kwargs.get("multiprocess_num_processes", 2) # default to two processes.
  11. return_obj = kwargs.get("multiprocess_returnable", Queue()) # default to stdlib Queue
  12. for i in xrange(num_processes):
  13. def returning_wrapper(*args, **kwargs):
  14. kwargs.get("multiprocess_returnable").put(self.func(*args, **kwargs))
  15. pro = Process(target=returning_wrapper, args=args, kwargs=kwargs)
  16. self.processes.append(pro)
  17. pro.start()
  18. @Multiprocess
  19. def info():
  20. print title
  21. print 'module name:', __name__
  22. print 'parent process:', os.getppid()
  23. print 'process id:', os.getpid()
  24. info()
  25.