2017-09-25 123 views
0

我还在学习Python。对我来说,这个代码是不是显示究竟如何“池映射”完全明显适用于https://docs.python.orgPython多处理pool.map说明

from multiprocessing import Pool 

def f(x): 
    return x*x 

if __name__ == '__main__': 
    numb_list = [1, 22, 333] 
    with Pool(5) as p: 
     print(p.map(f, numb_list)) 

所以......其堵塞列表[1,22,333]的各项指标分别为独立的所有运行在不同核心上的相同功能的进程? 如果是这样,我如何确定某个迭代的细节?如果 实施例I编辑的功能,因为我想知道某一元件的长度在列表[1,22,333]

def f(x): 
    if len(x) >= 3: 
     print("Big input") 
    return x*x 

是否池一次插入整个列表到每个进程运行函数或名单的一部分?我可以通过这种方式检查元素输入的长度吗? 有没有一种方法可以使用for循环而不是map来区分当前正在输入哪个迭代或元素?

+0

你是对的,它将每个元素分别传递到不同的进程中。 –

+0

好的。所以我猜我可以在函数中检查x的长度,它应该是当前进程列表中的单个元素?没有很多人擅长编码并行程序? –

+0

是的,那应该是对的。 –

回答

0

这几乎等于:

from multiprocessing import Process 

results = [] 
for item in numb_list: 
    process = Process(target=f, args=(item,)) 
    process.start() 
    # insert process result in to results 

map会解开这个迭代参数,每个项目发送到每个进程。