Python多处理pool.map说明

时间:2017-09-25 02:47:17

标签: python multiprocessing pool

我还在学习Python。对我而言,这段代码并不完全明显地显示“池映射”在https://docs.python.org上的确切工作方式:

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]的每个索引分别插入到同一个函数的不同进程中,这些进程都运行在不同的核心上? 如果是这样,我如何确定某个迭代的细节? 示例,如果我编辑了该函数,因为我想知道列表中某个元素的长度[1,22,333]

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

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

1 个答案:

答案 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将解压缩此可迭代参数并将每个项目发送到每个进程。