进程池VS进程(python)

本文测试的是在生产者与消费者模式下,多个进程与用进程池管理的多个进程谁跟快

依赖库:

from multiprocessing import Process,Queue,Pool
import time,os

生产者:

def producer(q):
    for i in range(100):  #一开始设置只生产十个包子
        time.sleep(0.1)  #一定是要消费者的1/3以下,否则不够人吃
        res='包子%s' %i
        q.put(res)
        print('\033[44m%s 生产了 %s\033[0m' %(os.getpid(),res))
    q.put(None) #进程设置为三,因此发送三个结束信号
    q.put(None)
    q.put(None)

纯多进程消费者:

def consumer(q):
    while True:
        res=q.get()
        if res is None:break #收到结束信号则结束
        time.sleep(0.5)
        print('\033[45m%s 吃 %s\033[0m' %(os.getpid(),res))


if __name__ == '__main__':
    start = time.time()
    q=Queue()
    #生产者:造包子厨师
    p1=Process(target=producer,args=(q,))
    p1.start()



    #消费者:吃包子
    c1=Process(target=consumer,args=(q,))
    c2=Process(target=consumer,args=(q,))
    c3 = Process(target=consumer, args=(q,))

    #开始
    c1.start()  
    c2.start()
    c3.start()
    print('造包子')
    c2.join()
    c1.join()
    c3.join()
    print(time.time()-start)

线程池控制:

def comsumer2(res):
    time.sleep(0.5)
    print('\033[45m%s 吃 %s\033[0m' % (os.getpid(), res))

if __name__ == '__main__':
    start = time.time()
    q=Queue()
    #生产者:造包子
    p1=Process(target=producer,args=(q,))
    p1.start()

    #进程池管理的消费者:吃包子
    pools = Pool(processes=3)
    while True:
        n = q.get()
        if (n==None):  #收到结束信号则结束
            break
        pools.apply_async(comsumer2,(n,))
    pools.close()
    pools.join()


    print(time.time()-start)

测试结果:

实验1:100个包子,各自三个进程

由于不是同时进行的,因此设置三次实验

线程池1:18.300745487213135s

线程池2:18.054959774017334s

线程池3:17.961004734039307s

纯纯的进程1:17.781851768493652s

纯纯的进程2:17.907068967819214s

纯纯的进程3:17.974420070648193s

第一次实验,纯纯的进程险胜,但是其实差不多

实验2:100个包子,各自六个进程,且小小加速了一下产生包子的速度

线程池1:10.157740116119385s

线程池2:10.041166067123413s

线程池3:9.972941398620605s

纯纯的进程1:10.203296184539795s

纯纯的进程2:9.738812446594238s

纯纯的进程3:9.872073650360107s

第二次实验,两者各有胜负,依旧差不多,但是线程池明显要便捷很多

结论:以后写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值