如何恢复传递给multiprocessing.Process的函数的返回值?

发布于 2021-02-02 23:12:53

在下面的示例代码中,我想恢复该函数的返回值worker。我该怎么做呢?此值存储在哪里?

示例代码:

import multiprocessing

def worker(procnum):
    '''worker function'''
    print str(procnum) + ' represent!'
    return procnum


if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()
    print jobs
输出:

0 represent!
1 represent!
2 represent!
3 represent!
4 represent!
[<Process(Process-1, stopped)>, <Process(Process-2, stopped)>, <Process(Process-3, stopped)>, <Process(Process-4, stopped)>, <Process(Process-5, stopped)>]

我似乎在中存储的对象中找不到相关的属性jobs。

关注者
0
被浏览
94
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    使用共享变量进行通信。例如这样:

    import multiprocessing
    
    def worker(procnum, return_dict):
        '''worker function'''
        print str(procnum) + ' represent!'
        return_dict[procnum] = procnum
    
    
    if __name__ == '__main__':
        manager = multiprocessing.Manager()
        return_dict = manager.dict()
        jobs = []
        for i in range(5):
            p = multiprocessing.Process(target=worker, args=(i,return_dict))
            jobs.append(p)
            p.start()
    
        for proc in jobs:
            proc.join()
        print return_dict.values()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看