博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之生产者消费者模型
阅读量:6196 次
发布时间:2019-06-21

本文共 2148 字,大约阅读时间需要 7 分钟。

#Auther Bob#--*--conding:utf-8 --*--#生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个服务员我们就可以用queue来实现import threadingimport queueimport time'''def consumer(p,que):    id = que.get()    print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id))def prodcer(p,que):    print("[%s]做了2个包子" %(p))    que.put("baozi[1]")    print("baozi[1]做好了")    que.put("baozi[2]")    print("baozi[2]做好了")if __name__ == '__main__':    que = queue.Queue()    p = threading.Thread(target=prodcer,args=("Bob",que))    c1 = threading.Thread(target=consumer,args=("c1",que))    c2 = threading.Thread(target=consumer, args=("c2", que))    c3 = threading.Thread(target=consumer, args=("c3", que))    p.start()    c1.start()    c2.start()    c3.start()    # p.join()'''#上面这个例子,如果没有包子了,但是厨师会不知道,厨师也不会继续做包子,而没有吃到包子的人会一直等待,程序会一直不结束#我们可以这样做,消费者发现没有包子了,告诉服务员,服务员在告诉厨师,这里我们就会遇到task.downdef consumer(p):    id = que.get()    print("[%s]来吃包子了,我吃到的包子的名字是[%s]" %(p,id))    que.task_done()   #如归队列为空了,则会通知que.join,que.join就不会阻塞了"""def prodcer(p):    while True:        if que.qsize() < 3:            # time.sleep(1)            for i in range(2):                print("[%s]做了包子[%d]" %(p,i))                que.put(i)            que.join()  #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了"""def prodcer(p):    while True:        # time.sleep(1)        for i in range(2):            print("[%s]做了包子[%d]" %(p,i))            que.put(i)        que.join()  #如果队列一直不为空,则que.join会一直阻塞,如果队列为空,则que.join就不阻塞了if __name__ == '__main__':    que = queue.Queue()    p = threading.Thread(target=prodcer,args=("Bob1",))    p2 = threading.Thread(target=prodcer, args=("Bob2",))    c1 = threading.Thread(target=consumer,args=("c1",))    c2 = threading.Thread(target=consumer, args=("c2",))    c3 = threading.Thread(target=consumer, args=("c3",))    c4 = threading.Thread(target=consumer, args=("c4",))    c5 = threading.Thread(target=consumer, args=("c5",))    c6 = threading.Thread(target=consumer, args=("c6",))    p.start()    p2.start()    c1.start()    c2.start()    c3.start()    c4.start()    c5.start()    c6.start()    # p.join()    # que.task_done()

  

转载于:https://www.cnblogs.com/bainianminguo/p/7426273.html

你可能感兴趣的文章
2019.03.02
查看>>
编写更高效的 lua 代码(转载)
查看>>
UniversalImageLoader 学习
查看>>
NWU CCCC 1017(HDU 1272改编 并查集判断图是否存在环)
查看>>
HDU 5785 Interesting
查看>>
logistic分类
查看>>
遍历分区大小
查看>>
Frobenius norm(Frobenius 范数)
查看>>
IO流文件字符输入输出流,缓冲流
查看>>
Entity Framework学习
查看>>
两个XML文件进行对比
查看>>
C++学习01
查看>>
Flappy Bird 源码走读
查看>>
UVA - 11995 模拟
查看>>
angularjs过滤器(一)------禁止转载------
查看>>
图表(Chart & Graph)你真的用对了吗?
查看>>
自定义实现复选框
查看>>
4月25上午及补交4月24号作业
查看>>
java 关键字this super
查看>>
测试代码的方法
查看>>