zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    基于antlr的表达式解析器
    ANTLR语法层的选项及动作
    Understanding ANTLR Grammar Files
    写给Git初学者的7个建议
    Top 8 Diagrams for Understanding Java
    技术面不深入
    一个初级程序员学习新技术的策略
    SoftReference,WeakReference&WeakHashMap
    探索Antlr(Antlr 3.0更新版)
    Five minute introduction to ANTLR 3
  • 原文地址:https://www.cnblogs.com/along1226/p/5645647.html
Copyright © 2011-2022 走看看