pyhton中的Queue(队列)

什么是队列?

队列就像是水管子,先进先出,与之相对应的是栈,后进先出。

队列是线程安全的,队列自身有机制可以实现:在同一时刻只有一个线程在对队列进行操作。

存数据,取数据

1 import Queue
2
3 q = Queue.Queue() #调用队列生成对象
4 q.put(1)  #存放第一个值到队列
5 q.put(2)  #存放第二个值到队列
6
7
8 print ‘get frist one:‘,q.get() #获取队列的第一个值
9 print ‘get second on:‘,q.get() #获取队列的第二个值

如果队列中的数据被取完了怎么办呢?

  会阻塞

q = Queue.Queue() #调用队列生成对象

q.put(1)  #存放第一个值到队列
q.put(2)  #存放第二个值到队列

a = q.get() #获取队列的第一个值
print ‘get frist one:%s‘ % a
b = q.get() #获取队列的第二个值
print ‘get second one:%s‘ % b
c = q.get()#获取队列的第三个值
print ‘get third one:%s‘ % c

#结果:
‘‘‘
get frist one:1
get second one:2
#这里是阻塞状态,一直在等待着值进来~
‘‘‘

取不到值的时候如何能让它不阻塞?

  get_nowait()方法取

复制代码
q = Queue.Queue() #调用队列生成对象

q.put(1)  #存放第一个值到队列
q.put(2)  #存放第二个值到队列

a = q.get() #获取队列的第一个值
print ‘get frist one:%s‘ % a
b = q.get() #获取队列的第二个值
print ‘get second one:%s‘ % b
c = q.get_nowait()#获取队列的第三个值 ,使用:get_nowait()
print ‘get third one:%s‘ % c

不阻塞的时候,取不到又会报错,怎么办?

  异常处理

q = Queue.Queue() #调用队列生成对象
try:
    q.get_nowait()
except Queue.Empty as f:
    print ‘The Queue is empty!‘ 

队列的长度是可以规定的哦

  那么问题来了,队列被存满了怎么办?----->会阻塞...

  如何能不阻塞?---->put_nowait()----->无法存放会报错------>报错怎么办?------>异常处理。

q = Queue.Queue(2) #调用队列生成对象

q.put(1)  #存放第一个值到队列
print ‘put value 1 done‘
q.put(2)  #存放第二个值到队列
print ‘put vlaue 2 done‘
q.put(3) #存放第三个值到队列
print ‘put value 3 done‘

#结果:
‘‘‘
put value 1 done
put vlaue 2 done
#这里会阻塞,会一直等待~
‘‘‘

参考资料:

  http://www.cnblogs.com/luotianshuai/p/5098408.html

时间: 2024-12-29 10:42:36

pyhton中的Queue(队列)的相关文章

多线程中的 Queue队列中join()与task_done() ,

Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执行别的操作 如果线程里每从队列里取一次,但没有执行task_done(),则join无法判断队列到底有没有结束,在最后执行个join()是等不到结果的,会一直挂起. 可以理解为,每task_done一次 就从队列里删掉一个元素,这样在最后join的时候根据队列长度是否为零来判断队列是否结束,从而执行主线程. 下面看

java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码

代码下载地址:http://www.zuidaima.com/share/1838230785625088.htm 原文:java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码 最近由于zuidaima.com注册用户的增多,qq企业邮箱发送邮件会被封禁账号导致注册后面的用户收不到周总结,所以紧急开发了一套多账号,多服务器发送邮件的程序. 大概的设计思路如下: 1.服务器可以无限扩展,但由于qq企业邮箱是限定域名,所以要想多服务器还得有多域名,多账号也不行. 2.最

jQuery动画高级用法(上)——详解animation中的.queue()动画队列插队函数

决定对animate方面做一些总结,希望能给大家一些启发和帮助 从一个实际应用谈起 今天不谈animate().fadeIn().fadeOut().slideUp().show().hide()诸如此类的具体动画函 数,而谈谈几个并不常用的,甚至说是有点风马牛不相及,但又十分十分重要的动画函数queue(),dequeue(),和stop(). 先让我们从一个简单的例子谈,假设有一个购物功能,在结账之前,用户仍然可以把购物车里的删除至备选栏中(也许因为用户的资金不足,可以存储至下次购买) 好,

112 python程序中的进程操作-进程之间进行通信(mulitiProcessing Queue队列)

一.进程间通信 IPC(Inter-Process Communication) IPC机制:实现进程之间通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁的概念--->queue 二.队列(Queue) 2.1 概念-----multiProcess.Queue 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. Queue([maxsize])创建共享的进程队列. 参数 :maxsize是队列中允许的最大项数.如果省略此参数,则无大小限制

queue队列

今天有一个需求需要随时更新数据需要及时删除过期数据,就用到队列了.每执行一次定时任务就往queue中加一次数据,所以需要在一个独立于定时任务的类中加静态属性: public static Queue<CB_SingleDolaryToday> queue = new LinkedList<>() 因为需要求元素和所以加静态属性   public static double sumDolary = 0.0; 在定时任务中需要更新队列并删除过期元素 /*** 循环检测队列头元素,如果超

Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过start方法启动线程--->线程变为可运行可执行状态,然后通过数据产生共享,线程产生互斥---->线程状态变为阻塞状态---->阻塞状态想打开的话可以调用notify方法. 这里Java5中提供了封装好的类,可以直接调用然后构造阻塞状态,以保证数据的原子性. 2.如何实现? 主要是实现Blo

python2.0_s12_day9之day8遗留知识(queue队列&amp;生产者消费者模型)

4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 * 6.queue队列 * 7.生产者消费者模型 4.6 queue队列 queue非常有用,当信息必须安全的在多个线程之间进行数据交换的时候就应该想到queue 所以,queue它能保证数据被安全的在多个线程之间进行交换,那他就是天生的线程安全. queue有那么几种: class queue.Queue(maxsize=0) # 先入先出 class queue.LifoQ

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

C#基础---Queue(队列)的应用

   Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不通过,那么全部错误返回到界面,可能会让用户束手无策.我们有时候往往在一个流程中.只将Check流程中第一个不符合条件的错误提示给用户,让用户修改.首先我们就想到了队列,通过队列将所有的Check方法注册,然后依次出列.执行. Demo背景: XX公司招人,对员工的居住地点,姓氏,年龄都有要求. 一.