基于this pretty useful tutorial我试图简单地实现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
问题在于打印时间相等,因此multiprocessing
没有加快处理速度。为什么呢?
答案 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中的基本问题相同。