【问题标题】:Importing Modules that use MultiProcessing Python导入使用 MultiProcessing Python 的模块
【发布时间】:2011-12-20 19:22:15
【问题描述】:

我希望使用多处理模块来加快某些运输计划模型的运行时间。我已经通过“正常”方法尽可能多地进行了优化,但其核心是一个荒谬的并行问题。例如,对 4 组不同的输入执行相同的一组矩阵运算,所有的信息都是独立的。

伪代码:

    for mat1,mat2,mat3,mat4 in zip([a1,a2,a3,a4],[b1,b2,b3,b4],[c1,c2,c3,c4],[d1,d2,d3,d4]):
        result1 = mat1*mat2^mat3
        result2 = mat1/mat4
        result3 = mat3.T*mat2.T+mat4

所以我真正想做的就是在四核计算机上并行处理这个循环的迭代。我已经阅读了这里和多处理模块的其他地方,除了需要之外,它似乎完全符合要求:

   if __name__ == '__main__'

据我了解,这意味着您只能从脚本运行多进程代码?即,如果我这样做:

    import multiprocessing
    from numpy.random import randn

    a = randn(100,100)
    b = randn(100,100)
    c = randn(100,100)
    d = randn(100,100)

    def process_matrix(mat):
        return mat^2

    if __name__=='__main__':
        print "Multiprocessing"
        jobs=[]

        for input_matrix in [a,b,c,d]:
            p = multiprocessing.Process(target=process_matrix,args=(input_matrix,))
            jobs.append(p)
            p.start()

它运行良好,但是假设我将上面的内容保存为“matrix_multiproc.py”,并定义了一个新文件“importing_test.py”,它只是声明:

    import matrix_multiproc

多处理不会发生,因为名称现在是“matrix_multiproc”而不是“ma​​in

这是否意味着我永远不能对导入的模块使用并行处理?我要做的就是让我的模型运行为:

    def Model_Run():
        import Part1, Part2, Part3, matrix_multiproc, Part4

        Part1.Run()
        Part2.Run()
        Part3.Run()
        matrix_multiproc.Run()
        Part4.Run()

很抱歉,对于一个可能很简单的答案提出了一个很长的问题,谢谢!

【问题讨论】:

    标签: python import matrix parallel-processing multiprocessing


    【解决方案1】:

    这是否意味着我永远不能对导入的模块使用并行处理?

    不,它没有。您可以在代码中的任何位置使用multiprocessing只要程序的主模块使用if __name__ == '__main__' 保护。

    在 Unix 系统上,您甚至不需要那个保护,因为它具有 fork() 系统调用来从主 python 进程创建子进程。

    另一方面,在 Windows 上,fork()multiprocessing 模拟,方法是生成一个运行主模块的新进程再次,使用不同的 __name__。如果没有这里的守卫,您的主应用程序将尝试再次生成新进程,从而导致无限循环,并很快耗尽您计算机的所有内存。

    【讨论】:

    • 这是否意味着我不应该看到 Unix 系统上的旧警告?还是还有虚假的警告?我在 OSX 上看到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多