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

时间:2018-01-23 15:43:33

标签: python multiprocessing

基于this pretty useful tutorial我试图简单地实现Python multiprocessing来衡量它的有效性。模块multi1multi2multi3包含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

问题在于打印时间相等,因此multiprocessing没有加快处理速度。为什么呢?

1 个答案:

答案 0 :(得分: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=())

这与the threaded case中的基本问题相同。