这个多处理示例有什么问题?

Vic*_*ira 0 python multiprocessing

基于这个非常有用的教程,我尝试了一个简单的Python实现multiprocessing来衡量它的有效性.这些模块multi1,multi2,multi3包含ODE的集成,并在CSV输出的计算值(它并不重要,他们在这里为一个脚本来执行的东西).

import multiprocessing
import multi1
import multi2
import multi3
import time

t0 = time.time()

if __name__ == '__main__':

    p1 = multiprocessing.Process(target = multi1.main(), args=())
    p2 = multiprocessing.Process(target = multi2.main(), args=())
    p3 = multiprocessing.Process(target = multi3.main(), args=())

    p1.start()
    p2.start()
    p3.start()

    p1.join()
    p2.join()
    p3.join()

t1 = time.time()

multi1.main()
multi2.main()
multi3.main()

t2 = time.time()

print t1-t0
print t2-t1
Run Code Online (Sandbox Code Playgroud)

问题是打印时间相等,所以multiprocessing没有加快过程.为什么?

Sha*_*ger 5

调用 main了主线程,并将返回值(可能None)作为传递target,因此您的工作进程中没有进行任何实际工作.删除调用parens,因此您无需调用它即可传递函数,例如:

p1 = multiprocessing.Process(target=multi1.main, args=())
p2 = multiprocessing.Process(target=multi2.main, args=())
p3 = multiprocessing.Process(target=multi3.main, args=())
Run Code Online (Sandbox Code Playgroud)

与线程情况中看到的基本问题相同.