Python--Queue

作用:
  • Queue模块用于实现生产者-消费者模型,保证多线程并发操作时的安全,基于各种必需的锁机制来保证并发操作的安全
  • 模块支持三种队列:FIFO队列、LIFO队列、Priority队列
python版本:

函数定义:
  • Queue.Queue(maxsize=0)
    • FIFO队列
    • maxsize标识允许的最大队列长度
    • 队列满时,插入操作将阻塞--produce
    • 队列空时,删除操作将阻塞--consume
  • Queue.LifoQueue(maxsize=0)
    • LIFO队列
    • python 2.6及以后版本
  • Queue.PriorityQueue(maxsize=0)
    • 优先级队列
    • 优先级值最低的最先访问,存储形式为:(priority_number, data)
    • python 2.6及以后版本
  • Queue.Empty
    • 异常Exception
    • 当调用非阻塞的get()、get_nowait()方法时,如果队列为空则抛出Queue.Empty异常
  • Queue.Full
    • 异常Exception
    • 当调用非阻塞put()、put_nowait()方法时,如果队列为满则抛出Queue.Full异常
  • Queue对象(Queue、LifoQueue、PriorityQueue)的方法定义
    • qsize():返回的是近似大小,qsize()>0无法保证接下来的get()不会阻塞
    • full():
    • put(item[, block[, timeout]])
    • put_nowait(item)
    • get([block[, timeout]])
    • get_nowait()
    • task_done():consumer线程用于确认之前的操作(get and process)已经结束
    • join():阻塞直到队列中的所有元素都被消费(get and process)
应用实例:
  • 生产者-消费者模型:
  1. def worker():
  2.     while True:
  3.         item = q.get() #消费者取数据
  4.         do_work(item)
  5.         q.task_done() #当有线程因为join方法阻塞时,并且队列中的所有元素都调用了task_done()方法,则阻塞线程将resume
  6. q = Queue()
  7. for i in range(num_worker_threads):
  8.      t = Thread(target=worker)
  9.      t.daemon = True
  10.      t.start()
  11. for item in source():
  12.     q.put(item) #生产者,负责往队列中添加数据
  13. q.join() # block until all tasks are done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值