from Queue import Queue from multiprocessing import Process def returning_wrapper(func, *args, **kwargs): kwargs.get("multiprocess_returnable").put(func(*args, **kwargs)) class Multiprocess(object): """Cute decorator to run a function in multiple processes.""" def __init__(self, func): self.func = func self.processes = [] def __call__(self, *args, **kwargs): num_processes = kwargs.get("multiprocess_num_processes", 2) # default to two processes. return_obj = kwargs.get("multiprocess_returnable", Queue()) # default to stdlib Queue for i in xrange(num_processes): pro = Process(target=returning_wrapper, args=tuple([self.func] + list(args)), kwargs=kwargs) self.processes.append(pro) pro.start() def __eq__(self, other): # Fuck you pickle return True @Multiprocess def info(): print title print 'module name:', __name__ print 'parent process:', os.getppid() print 'process id:', os.getpid() info()