Python 多处理 imap

Python Multiprocessing imap

今天我又遇到了一个关于多处理的问题... 我有一个小示例代码:

import multiprocessing

def function(a):
    v = a**2
    w = a**3
    x = a**4
    y = a**5
    z = a**6


b = [1,2,3,4,5,6,7,8,9,10]

if __name__ == "__main__":
    pool = multiprocessing.Pool(processes=4)
    pool.imap(function, b)

结果应该是 5 个列表(vlist、wlist、xlist、ylist 和 zlist)。 vlist 应该有所有 v 结果,wlist 应该有 w 结果等等。 我想订购所有结果,所以我想使用 imap,我希望它是正确的方法。 我以为我可以使用附加命令之类的东西,但我不知道如何...

感谢您的帮助, 约翰

imap() 或任何映射函数采用一个值,然后通过函数的 return 值将其 'maps' 转换为另一个值。在您发布的代码段中,function() 没有 return 任何内容。

import multiprocessing

def function(a):
    v = a**2
    w = a**3
    x = a**4
    y = a**5
    z = a**6
    return v, w, x, y, z

b = [1,2,3,4,5,6,7,8,9,10]

pool = multiprocessing.Pool(processes=4)
vals = pool.imap(function, b)

for i in vals:
    print i

输出为:

(1, 1, 1, 1, 1)
(4, 8, 16, 32, 64)
(9, 27, 81, 243, 729)
(16, 64, 256, 1024, 4096)
(25, 125, 625, 3125, 15625)
(36, 216, 1296, 7776, 46656)
(49, 343, 2401, 16807, 117649)
(64, 512, 4096, 32768, 262144)
(81, 729, 6561, 59049, 531441)
(100, 1000, 10000, 100000, 1000000)