python 之queue
来源:互联网 发布:淘宝的延长收货是什么 编辑:程序博客网 时间:2024/05/22 09:46
http://www.dbafree.net/?p=1125
python原生的list,dict等,都是not thread safe的。而queue,是线程安全的。Queue.Queue类即是一个队列的同步实现。今天有个需求,典型的“生产者消费者问题”,刚好可以用到queue,挺好用。
python queue模块有三种队列:
1、python queue模块的FIFO队列先进先出。
2、LIFO类似于堆。即先进后出。
3、还有一种是优先级队列级别越低越先出来。
针对这三种队列分别有三个构造函数:
1、class Queue.Queue(maxsize) FIFO
2、class Queue.LifoQueue(maxsize) LIFO
3、class Queue.PriorityQueue(maxsize) 优先级队列
介绍一下此包中的常用方法:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
非阻塞 Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作
这个例子很好,参考至网上:
#!/home/oracle/dbapython/bin/python
#encoding=utf-8
import threading
import time
from Queue import Queue
class Producer(threading.Thread):
def run(self):
global queue
count = 0
while True:
for i in range(100):
if queue.qsize() > 1000:
pass
else:
count = count +1
msg = '生成产品'+str(count)
queue.put(msg)
print msg
time.sleep(1)
class Consumer(threading.Thread):
def run(self):
global queue
while True:
for i in range(3):
if queue.qsize() < 50:
pass
else:
msg = self.name + '消费了 '+queue.get()
print msg
time.sleep(1)
queue = Queue()
def test():
for i in range(100):
msg='初始产品'+str(i)
print msg
queue.put(msg)
for i in range(2):
p = Producer()
p.start()
for i in range(5):
c = Consumer()
c.start()
if __name__ == '__main__':
test()
- python 之queue
- python多线程之Queue
- python之Queue模块
- python之Queue
- Python学习之Threading, Queue
- 高性能Python之:Queue,deque,queue对比
- Python之Queue模块使用心得
- python学习之队列(Queue)
- python Queue
- Queue python
- Python--Queue
- python Queue
- python Queue
- python queue
- Python queue
- python Queue
- python queue
- [Python] python Queue模块
- 将 Shiro 作为应用的权限基础
- 转如何在oracle中导入dmp数据库文件
- BlockingQueue
- C++ 中dynamic_cast<>的使用方法
- 跨系统如何保持Session存活和Token共享问题
- python 之queue
- 【原】如何阅读学术论文
- 大型网站架构之系列
- libevent学习笔记一:总体把握
- 计算机计算乘除法的原理
- springMVC --DispatcherServlet详解
- iOS—修改AFNetworking源文件可接收text/plain的方法
- 树莓派 raspberry安全关机命令重启命令
- AppStore App申请审核加速