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()