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

本文比较了Python中的thread、multiprocessing和普通方法在执行复杂运算时的速度。结果显示,multiprocessing方法能显著减少运行时间,提升效率,而thread有时可能比普通方法更慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值