最近在学习python的multiprocessing库,想要同时处理两个不同的函数,但是在并行后计算时间发现每个函数需要运算的耗时增加了,导致并行比串行更慢。是我写的姿势有问题吗.....
# create two process
consumed_capacity_p = Process(target=get_consumed_capacity, args=(output_q))
borrowed_usage_p = Process(target=get_borrowed_usage, args=(output_q))
start = time.time()
# start process
consumed_capacity_p.start()
borrowed_usage_p.start()
# join process
consumed_capacity_p.join()
borrowed_usage_p.join()
end = time.time()
理论上不可能,除非是CPU的平均负载,也就是top命令的load average到达一个峰值,或者进程间有数据交互,但没有使用进程七大通信的任意方式。如果说完全独立的两个处理函数,比如说读图片等任何本地磁盘io的CPU密集型操作,多进程一定是更快的。
写法上应该是没问题的,multiprocessing的多进程机制实现并行计算是利用多核CPU的优势,所以可能需要确定你是否使用的是多核CPU
补充:测试了每个函数的运行时间,前三行是串行,后三行是并行,不知道为什么会多三秒
get consumed capacity:4.328038454055786
get_borrowed_usage:1.3593380451202393
total:5.695378065109253
get consumed capacity:4.300848007202148
get borrowed usage:1.3693742752075195
total:8.277498722076416