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

 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. NGUI学习随笔

    一.NGUI的直接用法 1.      Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加.(注:用Component添加无效). 2.  ...

  2. 容器化haproxy+keepalived

    # 拉取haproxy镜像 docker pull haproxy:1.7.8-alpine mkdir /etc/haproxy cat >/etc/haproxy/haproxy.cfg&l ...

  3. input标签处理多文件上传

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  4. C++ STL-stack使用详解

    stack 类是容器适配器,它给予程序员栈的功能--特别是 FILO (先进后出)数据结构. 该类模板表现为底层容器的包装器--只提供特定函数集合.栈从被称作栈顶的容器尾部推弹元素. 一:头文件 #i ...

  5. django模板使用

    概述 模板由两部分组成,HTML代码,逻辑控制代码,作用:快速生成HTML页面,优点:模板的设计实现了业务逻辑与现实内容的分离 定义模板 挖坑与继承 模板继承可以减少页面的内容的重复定义,实现页面的重 ...

  6. TFRecords转化和读取

    标准TensorFlow格式 TensorFlow的训练过程其实就是大量的数据在网络中不断流动的过程,而数据的来源在官方文档[^1](API r1.2)中介绍了三种方式,分别是: Feeding.通过 ...

  7. Using index, using temporary, using filesort - how to fix this?

    解释一: These are the following conditions under which temporary tables are created. UNION queries use ...

  8. HDU 3886

    一开始又往打表想了....不过,打表确实不好处理,转DFS. DFS有几个要注意的问题,1.对于枚举以零开始的数.我纠结了很久,最终学习别人的方法,设一个BOOL,并且假设最高一位有零,很方便.2.当 ...

  9. IP协议解读(三)

    今天我们来介绍网络层中的ICMP协议 ICMP报文格式 图一: 从图片上我们能够分析出.前三位的字段都是固定的.8位类型字段,8位代码字段.16位校验和字段.其它字段因ICMP报文类型不同而不同.8位 ...

  10. UML基本架构建模--获取类

     Getting Started 開始 Modeling a system involves identifying the things that are important to your p ...