队列Queue的get方法
写了一段生产者消费者模型的代码:
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方法的更多相关文章
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍
C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...
- Python进阶【第二篇】多线程、消息队列queue
1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并 ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- jquery 的队列queue
使用示列代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- (C#)使用队列(Queue)解决简单的并发问题
(C#)使用队列(Queue)解决简单的并发问题 2015-07-16 13:04 13265人阅读 评论(8) 收藏 举报 分类: Asp.Net(8) 版权声明:本文为博主原创文章,未经博主允 ...
- java09 队列Queue与Deque
队列Queue与Deque. Enumeration Hashtable与Hashtable子类Properties(资源配置文件) 引用类型(强.软.弱.虚)与WeakHashMap Identit ...
- 多线程利器---队列(queue)
列表是不安全的数据结构 import threading,time li=[1,2,3,4,5] def pri(): while li: a=li[-1] print(a) time.sleep(1 ...
- 队列Queue和栈
1.队列Queue是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式,只能从线性表的一段添加(offer)元素, 从另一段取出(poll)元素,队列遵循先进先出的原则. 2.J ...
- java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用
1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...
随机推荐
- 路飞学城Python-Day108
96-分页器1 批量插入的方式就不能用ORM的create()方式去做了,因为create就是对sql进行insert的操作,sql最好不要每次有一条数据就去进行插入,最好的方式就是插入一组数据 fr ...
- ZooKeeper伪集群的搭建(Windows)
首先下载 zookeeper 地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ 1.下载完成解压后修改文件夹名字为zookeeper1,然后删除c ...
- Day 09 文件操作
什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位.文件的操作是基于文件,即文件的操作核心就是:读和写.也 就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应 ...
- linux笔记常用命令
LINUX成长日记 1.本人工作实例:(将一台服务器的数据库复制到另外一台服务器上) scp -r -P 8351 /bak_mysql/sz_b2b2c201705180200.sql root@1 ...
- HDU-1695 GCD(求一个区间内与一个数互质的个数)
题意: 给你一个T,是样例的个数,接下来是五个数l1,r1,l2,r2,k 前四个数代表两个区间(l1,r1),(l2,r2)这个题l1=1,l2=1; 取x1属于(1,r1),x2属于(1,r2) ...
- Edit Distance FZU-1434
题目大意: 给你两个字符串A,B,和以下三种操作: 1.删除一个字符 2.插入一个字符 3.把一个字符改变成另一个字符 求使A变成B所需要的最少的操作: 我刚开始的思路是以为求出最长公共子序列,然后对 ...
- MVC架构之delegate
Qt的MVC架构可以实现很多数据显示的功能,本次主要对代理进行一个总结: 重实现QStyledItemDelegate类,实现自定义类. (1)ComboxDelegate.h #ifndef COM ...
- ZOJ 3874 Permutation Graph (分治NTT优化DP)
题面:vjudge传送门 ZOJ传送门 题目大意:给你一个排列,如果两个数构成了逆序对,就在他们之间连一条无向边,这样很多数会构成一个联通块.现在给出联通块内点的编号,求所有可能的排列数 推来推去容易 ...
- [bzoj3505 Cqoi2014] 数三角形 (容斥+数学)
传送门 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正 ...
- 在eclipse中maven构建Web项目,tomcat插件在maven中的运用
1.选中maven,构建maven web 2.项目构建好之后发现一个错误如图,是因为没有servlet的API,我们需要在pom.xml 中对servlet的API进行依赖 pom.xml如下即可 ...