python补充之Multiprocessing(三)Threat、Multiprocessing和Normal方法速度比较

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方法能够减少一半多的时间,大大提升了运行的速度。

至此就结束了,希望能够帮助到大家!

猜你喜欢

转载自blog.csdn.net/weixin_44086593/article/details/87552436