from Queue import Queue from multiprocessing import Process class Multiprocess(object): 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): def returning_wrapper(*args, **kwargs): kwargs.get("multiprocess_returnable").put(self.func(*args, **kwargs)) pro = Process(target=returning_wrapper, args=args, kwargs=kwargs) self.processes.append(pro) pro.start() @Multiprocess def info(): print title print 'module name:', __name__ print 'parent process:', os.getppid() print 'process id:', os.getpid() info()