猿问

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

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

在下面的示例代码中,我想恢复函数的返回值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。


慕桂英546537
浏览 2707回答 3
3回答

哈士奇WWW

使用共享变量进行通信。例如这样:import&nbsp;multiprocessingdef&nbsp;worker(procnum,&nbsp;return_dict): &nbsp;&nbsp;&nbsp;&nbsp;'''worker&nbsp;function''' &nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;str(procnum)&nbsp;+&nbsp;'&nbsp;represent!' &nbsp;&nbsp;&nbsp;&nbsp;return_dict[procnum]&nbsp;=&nbsp;procnumif&nbsp;__name__&nbsp;==&nbsp;'__main__': &nbsp;&nbsp;&nbsp;&nbsp;manager&nbsp;=&nbsp;multiprocessing.Manager() &nbsp;&nbsp;&nbsp;&nbsp;return_dict&nbsp;=&nbsp;manager.dict() &nbsp;&nbsp;&nbsp;&nbsp;jobs&nbsp;=&nbsp;[] &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(5): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;multiprocessing.Process(target=worker,&nbsp;args=(i,return_dict)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jobs.append(p) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.start() &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;proc&nbsp;in&nbsp;jobs: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc.join() &nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;return_dict.values()

慕田峪4524236

简单的解决方案:import&nbsp;multiprocessing output=[]data&nbsp;=&nbsp;range(0,10)def&nbsp;f(x): &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;x**2def&nbsp;handler(): &nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;multiprocessing.Pool(64) &nbsp;&nbsp;&nbsp;&nbsp;r=p.map(f,&nbsp;data) &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rif&nbsp;__name__&nbsp;==&nbsp;'__main__': &nbsp;&nbsp;&nbsp;&nbsp;output.append(handler())print(output[0])输出:[0,&nbsp;1,&nbsp;4,&nbsp;9,&nbsp;16,&nbsp;25,&nbsp;36,&nbsp;49,&nbsp;64,&nbsp;81]
随时随地看视频慕课网APP

相关分类

Python
我要回答