【问题标题】:Simple parallel multiprocessing for defined function with multiple arguments具有多个参数的已定义函数的简单并行多处理
【发布时间】:2019-08-01 03:29:09
【问题描述】:

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

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)

我希望从multiprocessing 应用poolmap 来并行执行它。我的想法是应用如下内容:

import multiprocessing as mp
p = mp.Pool(4)
output = p.map(somefunc, <PARAMETERS "x, y, z">, <ITERATION "i">))
p.close()

我相信有更好的方法,我很感激。但是,我写这篇文章的目的是我真的很想知道这是否可行。如果可行,怎么办?提前致谢。

【问题讨论】:

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


    【解决方案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__' 否则你的进程将冻结

    【讨论】:

    • 如何写出正确的行?我试过p.map(somefunc, list1, list2, list3)p.map(somefunc, list1, list2, list3, i) 但都不起作用。
    猜你喜欢
    • 2018-10-17
    • 2014-03-24
    • 2017-03-24
    • 1970-01-01
    • 2018-04-03
    • 2011-05-26
    • 2019-11-29
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多