写了一段生产者消费者模型的代码:

 from time import sleep
from random import randint, random
from multiprocessing import Process, Queue def consumer(q, name):
while 1:
if q.get() == 'stop' and q.qsize() == 0:
break
food = q.get()
print('%s 吃了 %s' % (name, food))
sleep(randint(1, 3)) def producer(q, name, food):
for i in range(10):
sleep(random())
foo = food + str(i)
print("%s 拉了一坨 %s" % (name, foo))
q.put(foo) if __name__ == '__main__':
q = Queue(10)
c = Process(target=consumer, args=(q, "老狗"))
c.start()
p1 = Process(target=producer, args=(q, '峰哥', '粑粑'))
p1.start()
p1.join()
q.put('stop')

这段代码执行的结果是:

 峰哥 拉了一坨 粑粑0
峰哥 拉了一坨 粑粑1
老狗 吃了 粑粑1
峰哥 拉了一坨 粑粑2
峰哥 拉了一坨 粑粑3
峰哥 拉了一坨 粑粑4
老狗 吃了 粑粑3
峰哥 拉了一坨 粑粑5
老狗 吃了 粑粑5
峰哥 拉了一坨 粑粑6
峰哥 拉了一坨 粑粑7
老狗 吃了 粑粑7
峰哥 拉了一坨 粑粑8
峰哥 拉了一坨 粑粑9
老狗 吃了 粑粑9

发现只打印了奇数的产品,排错发现是逻辑出错了,应该先用food先从队列里面get,然后去判断,而上面这段代码的问题出在每次if判断从队列里面拿出来了一个导致的

下面是修改后的代码:

 from time import sleep
from random import randint, random
from multiprocessing import Process, Queue def consumer(q, name):
while 1:
food = q.get()
if food == 'stop':
break
print('%s 吃了 %s' % (name, food))
sleep(randint(1, 3)) def producer(q, name, food):
for i in range(10):
sleep(random())
foo = food + str(i)
print("%s 拉了一坨 %s" % (name, foo))
q.put(foo) if __name__ == '__main__':
q = Queue(10)
c = Process(target=consumer, args=(q, "老狗"))
c.start()
p1 = Process(target=producer, args=(q, '峰哥', '粑粑'))
p1.start()
p1.join()
q.put('stop')

队列Queue的get方法的更多相关文章

  1. C++ 标准模板库STL 队列 queue 使用方法与应用介绍

    C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...

  2. Python进阶【第二篇】多线程、消息队列queue

    1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...

  3. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  4. jquery 的队列queue

    使用示列代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  5. (C#)使用队列(Queue)解决简单的并发问题

    (C#)使用队列(Queue)解决简单的并发问题 2015-07-16 13:04 13265人阅读 评论(8) 收藏 举报  分类: Asp.Net(8)  版权声明:本文为博主原创文章,未经博主允 ...

  6. java09 队列Queue与Deque

    队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...

  7. 多线程利器---队列(queue)

    列表是不安全的数据结构 import threading,time li=[1,2,3,4,5] def pri(): while li: a=li[-1] print(a) time.sleep(1 ...

  8. 队列Queue和栈

    1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...

  9. java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用

    1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...

随机推荐

  1. node——获取路由中的参数

    var express=require('express'); var app=express(); app.get('/',function(req,res){ res.send('Index'); ...

  2. js操作url参数

    function getQueStr(url, ref) //获取参数值 { var str = url.substr(url.indexOf('?') + 1); if (str.indexOf(' ...

  3. springboot 不使用前端模板直接跳转页面

    1.创建springboot项目 2.在resource 下创建pages文件夹,存放所有页面 3.编写后台代码 4.访问http://localhost:8080/index,即可跳转到页面

  4. 【Codeforces 469B】Chat Online

    [链接] 我是链接,点我呀:) [题意] [题解] 因为你的朋友的时间是固定的. 你完全可以开一个tag[50]的数组,如果tag[i]=1说明i时刻你的基友在线(扫描基友的时间就能 得到 然后你在判 ...

  5. Mysql学习总结(37)——Mysql Limit 分页查询优化

    select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select * from table ...

  6. Eclipse设置jdk相关

    2.window->preferences->java->Compiler->设置右侧的Compiler compliance level 3.window->prefe ...

  7. Android 零基础学习之路

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正則表達式. 3.面向对象的抽象.封装,继承,多态.类与对象.对象初始化 ...

  8. UVA 11987 Almost Union-Find 并查集单点修改

                                     Almost Union-Find I hope you know the beautiful Union-Find structur ...

  9. excel如何将一列按奇偶数分成两列

    借助于函数.上图说明一切: 方法一.OFFSET函数, 奇数列公式:C1=OFFSET($A$1,ROW()*2-2,), 偶数列公式:D1=OFFSET($A$1,ROW()*2-1,) 一起下拉即 ...

  10. DB-MySQL:MySQL 教程

    ylbtech-DB-MySQL:MySQL 教程 1.返回顶部 1. MySQL 教程 MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relation ...