python补充之Multiprocessing(三)Threat、Multiprocessing和Normal方法速度比较
thread是多进程
multiprocessing是多核
都有优势,但是multiprocessing提升速度更快,thread方法甚至有时候会比普通方法更慢。尝试用三种方法同时计算两次复杂的运算比较运行时间。
下面代码给出演示:
路径:
/home/pi/Desktop/My_Project/TEXT/3_MultiprocessingLearning.py
代码:
import multiprocessing as mp
import threading as td
import time
def job(q,a):
res=0
for i in range(1000000):
res+=i+i**2+i**3
q.put(res+a)#queue
def multicore():
q=mp.Queue()
p1=mp.Process(target=job,args=(q,1))
p2=mp.Process(target=job,args=(q,2))
p1.start()
p2.start()
p1.join()
p2.join()
res1=q.get()
res2=q.get()
print('multi1:'+str(res1))
print('multi2:'+str(res2))
print('multiplus:'+str(res1+res2))
def normal():
res=0
res1=0
res2=0
for i in range(2):
for i in range(1000000):
res+=i+i**2+i**3
if i ==1:
res1=res+1
res=0
else:
res2=res+2
print('normal1:'+str(res1))
print('normal2:'+str(res2))
print('normal:'+str(res1+res2))
def multithread():
q=mp.Queue()
p1=td.Thread(target=job,args=(q,1))
p2=td.Thread(target=job,args=(q,2))
p1.start()
p2.start()
p1.join()
p2.join()
res1=q.get()
res2=q.get()
print('thread1:'+str(res1))
print('thread2:'+str(res2))
print('threadplus:'+str(res1+res2))
if __name__=='__main__':
st = time.time()
normal()
st1= time.time()
print('normal time:', st1 - st)
multithread()
st2 = time.time()
print('multithread time:', st2 - st1)
multicore()
print('multicore time:', time.time()-st2)
在终端中:
pi@raspberrypi:~ $ cd /home/pi/Desktop/My_Project/TEXT
pi@raspberrypi:~/Desktop/My_Project/TEXT $ python3 3_MultiprocessingLearning.py
结果:
normal1:0
normal2:499999666667166666000002
normal:499999666667166666000002
normal time: 9.228382110595703
thread1:249999833333583333000001
thread2:249999833333583333000002
threadplus:499999666667166666000003
multithread time: 9.625716209411621
multi1:249999833333583333000001
multi2:249999833333583333000002
multiplus:499999666667166666000003
multicore time: 4.411695241928101
可以看出,multiprocessing方法能够减少一半多的时间,大大提升了运行的速度。
至此就结束了,希望能够帮助到大家!