在下面的示例代码中,我想恢复函数worker
的返回值。我怎么能这样做呢?这个值在哪里存储?如何恢复传递给multiprocessing.Process的函数的返回值?
示例代码:
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
对象相关的属性。
由于提前, BLZ
我建议使用一个['multiprocessing.Queue'](https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Queue),而不是一个'管理器'在这里。使用'Manager'需要产生一个全新的进程,当'Queue'执行时这是过度的。 – dano
@dano:我想知道,如果我们使用Queue()对象,我们不能确定每个进程返回值的顺序。我的意思是如果我们需要结果的顺序,做下一步工作。我们如何确定哪个输出来自哪个进程 – Catbuilts
@Cbubuilts您可以从每个进程返回一个元组,其中一个值是您关心的实际返回值,另一个是来自进程的唯一标识符。但我也想知道为什么你需要知道哪个进程正在返回哪个值。如果你真的需要了解这个过程,或者你需要关联你的输入列表和输出列表?在这种情况下,我建议使用'multiprocessing.Pool.map'来处理你的工作项目清单。 – dano