Is it possible to multiprocess a function that returns something in Python?

前端 未结 6 1427
轻奢々
轻奢々 2020-12-03 02:54

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

6条回答
  •  我在风中等你
    2020-12-03 03:45

    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)
    

提交回复
热议问题