In Python I have seen many examples where multiprocessing is called but the target just prints something. I have a scenario where the target returns 2 variables, which I nee
It won't work on windows but here is is my multiprocessing decorator for functions, it returns a queue that you can poll and collect returned data from
import os
from Queue import Queue
from multiprocessing import Process
def returning_wrapper(func, *args, **kwargs):
queue = kwargs.get("multiprocess_returnable")
del kwargs["multiprocess_returnable"]
queue.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
kwargs["multiprocess_returnable"] = return_obj
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()
return return_obj
@Multiprocess
def info():
print 'module name:', __name__
print 'parent process:', os.getppid()
print 'process id:', os.getpid()
return 4 * 22
data = info()
print data.get(False)