具有多个参数的已定义函数的简单并行多处理

时间:2019-08-01 03:29:09

标签: python python-3.x function parallel-processing multiprocessing

我知道这个问题有很多例子,但是我想知道这个想法的最基本原理,即如何使用简单定义的函数运行带有多个参数的多重处理,如下面的代码示例。此函数从带有数字的三个独立列表中获取三个参数,并输出单个数字1800。

site[]

我希望应用list1 = [1,2,3,4,5] list2 = [6,7,8,9,10] list3 = [11,12,13,14,15] def somefunc(x, y, z): out = 0 for i in range(len(x)): num = x[i] * y[i] * z[i] out = out + num return(out) somefunc(list1,list2,list3) 中的poolmap来并行执行它。我的想法是应用类似以下的内容:

multiprocessing

我相信有更好的方法,我对此表示赞赏。但是,我的意图是,我真的很想知道这是否可行。如果可行,该怎么办?提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,这非常可行。您的方法是好的,并且会做得很好。如果您有多核计算机,也可以尝试使用线程。在多处理中,使用多个进程,而在多线程中,产生多个线程。我认为您的问题很简单,可以由线程处理。因此,您可以选择线程。

回复评论: 如果要使用Pool.map,则需要对代码进行一些更改。

list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10] 
list3 = [11,12,13,14,15]

def somefunc(list):
    x = list[0]
    y = list[1]
    z = list[2]
    out = 0
    for i in range(len(x)):
            num = x[i] * y[i] * z[i]
            out = out + num
    return(out)

import multiprocessing as mp

if __name__ == '__main__':
    p = mp.Pool(4)
    output = p.map(somefunc, [[list1, list2, list3]])
    p.close()
    print(output)

保持一致很重要     if __name__ == '__main__' 否则您的过程将冻结