生产者与消费者模型(重要)

小菜:

from multiprocessing import Process,Queue
import time,os,random
def procducer(q):
    for i in range(10):
        res = '包子%s'%i
        time.sleep(0.5)
        q.put(res)
        print('%s 生产了 %s'%(os.getpid(),res))

def consumer(q):
    while True:
        res = q.get()
        if res is None:
            break
        print('%s 吃 %s'%(os.getpid(),res))
        time.sleep(random.randint(2,3))

if __name__ == '__main__':
    q = Queue()
    p = Process(target=procducer,args=(q,))
    c = Process(target=consumer,args=(q,))

    p.start()
    c.start()

    p.join()
    q.put(None)
    print('主')

大招:

from multiprocessing import Process,Queue,JoinableQueue
import time,random,os

def procducer(food,q):
    for i in range(3):
        res='%s%s' %(food,i)
        time.sleep(0.5)
        q.put(res)
        print('%s 生产了 %s' %(os.getpid(),res))
    q.join()    #为了让p不死,内含计数器,(9)
def consumer(q):
    while True:
        res=q.get()
        print('%s 吃 %s' %(os.getpid(),res))
        time.sleep(random.randint(2,3))
        q.task_done()    # 让q.join 计数器逐个减一
if __name__ == '__main__':
    q=JoinableQueue()
    p1=Process(target=procducer,args=('包子',q,))
    p2=Process(target=procducer,args=('泔水',q,))
    p3=Process(target=procducer,args=('狗粮',q,))
    c1=Process(target=consumer,args=(q,))
    c2=Process(target=consumer,args=(q,))
    c1.daemon=True     ## 就加了个守护进程。
    c2.daemon=True

    p1.start()
    p2.start()
    p3.start()
    c1.start()
    c2.start()

    p1.join()   #为了让主进程不死
    p2.join()
    p3.join()
    #生产者结束--->q.join()----->消费者确实把所有数据都收到

    print('主',os.getpid())


为你钟情 --- 张先生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值