2016-12-04 77 views
0

今天我再有一个问题关于多处理...... 我有一个小例子代码:Python的多处理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结果等等。 我想获得所有订购的结果,所以我想使用imap,我希望它的方式正确。 我想我可以使用类似附加命令,但我不知道如何...

谢谢你的帮助, 约翰

+0

您的功能实际上并没有做任何事情,因为'V,W,X,Y,z'实际上并不存在。为了使用'imap()',你的函数需要返回一个值。 – theorifice

回答

1

imap()或任何映射函数有一个值和“映射”到另一个通过函数的返回值。在您发布的片段中,function()不会返回任何内容。

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)