queue队列

class queue.Queue(maxsize=0) #先入先出

class queue.LifoQueue(maxsize=0) #后入先出

class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列

queue.PriorityQueue 优先级案例一(使用数值进行优先级排序,数值越小优先级越高)

  1. import Queue
  2. class PriorityQueue(Queue.Queue):
  3. def _put(self, item):
  4. data, priority = item
  5. self._insort_right((priority, data))
  6. def _get(self):
  7. return self.queue.pop(0)[1]
  8. def _insort_right(self, x):
  9. """Insert item x in list, and keep it sorted assuming a is sorted.
  10. If x is already in list, insert it to the right of the rightmost x.
  11. """
  12. a = self.queue
  13. lo = 0
  14. hi = len(a)
  15. while lo < hi:
  16. mid = (lo+hi)/2
  17. if x[0] < a[mid][0]: hi = mid
  18. else: lo = mid+1
  19. a.insert(lo, x)
  20. def test():
  21. pq = PriorityQueue()
  22. pq.put(('b', 1))
  23. pq.put(('a', 1))
  24. pq.put(('c', 1))
  25. pq.put(('z', 0))
  26. pq.put(('d', 2))
  27. while not pq.empty():
  28. print pq.get(),
  29. test()

重写PriorityQueue类

执行结果

d

c

a

b

z

使用heapq实现优先级队列

  1. # coding=utf-8
  2. from heapq import heappush, heappop
  3. class PriorityQueue:
  4. def __init__(self):
  5. self._queue = []
  6. def put(self, item, priority):
  7. heappush(self._queue, (-priority, item))
  8. print(self._queue)
  9. def get(self):
  10. # print(heappop(self._queue),"---")
  11. return heappop(self._queue)[-1] #返回堆里面最小的值
  12. q = PriorityQueue()
  13. q.put('world', 1)
  14. q.put('hello', 2)
  15. print(q.get())
  16. print(q.get())

结果

[(-1, 'world')]

[(-2, 'hello'), (-1, 'world')]

hello

world

queue的用法

Queue.qsize()

返回队列的近似大小。注意,qsize() > 0并不能保证接下来的get()方法不被阻塞;同样,qsize() < maxsize也不能保证put()将不被阻塞。

Queue.empty()

如果队列是空的,则返回True,否则False。如果empty()返回True,并不能保证接下来的put()调用将不被阻塞。类似的,empty()返回False也不能保证接下来的get()调用将不被阻塞。

Queue.full()

如果队列满则返回True,否则返回False。如果full()返回True,并不能保证接下来的get()调用将不被阻塞。类似的,full()返回False也不能保证接下来的put()调用将不被阻塞。

Queue.put(item, block=True, timeout=None)

放item到队列中。如果block是True,且timeout是None,该方法将一直等待直到有队列有空余空间。如果timeout是一个正整数,该方法则最多阻塞timeout秒并抛出Full异常。如果block是False并且队列满,则直接抛出Full异常(这时timeout将被忽略)。

Queue.put_nowait(item)

等价于put(item, False)。

Queue.get(block=True, timeout=None)

从队列中移除被返回一个条目。如果block是True并且timeout是None,该方法将阻塞直到队列中有条目可用。如果timeout是正整数,该方法将最多阻塞timeout秒并抛出Empty异常。如果block是False并且队列为空,则直接抛出Empty异常(这时timeout将被忽略)。

Queue.get_nowait()

等价于get(False)。

如果需要跟踪进入队列中的任务是否已经被精灵消费者线程处理完成,可以使用下面提供的两个方法:

Queue.task_done()

表示一个先前的队列中的任务完成了。被队列消费者线程使用。对于每个get()获取到的任务,接下来的task_done()的调用告诉队列该任务的处理已经完成。

如果join()调用正在阻塞,当队列中所有的条目被处理后它将恢复执行(意味着task_done()调用将被放入队列中的每个条目接收到)。

如果调用次数超过了队列中放置的条目数目,将抛出ValueError异常。

Queue.join()

阻塞直到队列中所有条目都被获取并处理。

Python自动化之线程进阶篇(二)的更多相关文章

  1. Python自动化之线程进阶篇

    拓展知识 什么是CPU-bound(计算密集型) 和I/O bound(I/O密集型) ? I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CP ...

  2. python自动化之models 进阶操作二

    ################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...

  3. WPF 4 DataGrid 控件(进阶篇二)

    原文:WPF 4 DataGrid 控件(进阶篇二)      上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...

  4. Python基础—面向对象(进阶篇)

    通过上一篇博客我们已经对面向对象有所了解,下面我们先回顾一下上篇文章介绍的内容: 上篇博客地址:http://www.cnblogs.com/phennry/p/5606718.html 面向对象是一 ...

  5. python笔记13-多线程实战篇(tomorrow)

    安装 1.tomorrow安装,用pip可以直接安装 pip install tomorrow 单线程 1.以下案例是单线程时候跑的情况,在下载图片的时候很耗时. # coding:utf-8 fro ...

  6. python学习笔记——线程threading (二)重写run()方法和守护进程daemon()

    1 run()方法 1.1 单个线程 在threading.Thread()类中有run()方法. from time import ctime,sleep import threading # 定义 ...

  7. Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO

    本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO   1.  多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...

  8. Python自动化 【第八篇】:Python基础-Socket编程进阶

    本节内容: Socket语法及相关 SocketServer实现多并发 1. Socket语法及相关 sk = socket.socket(socket.AF_INET,socket.SOCK_STR ...

  9. Python自动化 【第十一篇】:Python进阶-RabbitMQ队列/Memcached/Redis

     本节内容: RabbitMQ队列 Memcached Redis 1.  RabbitMQ 安装 http://www.rabbitmq.com/install-standalone-mac.htm ...

随机推荐

  1. acm 选夫婿

    选夫婿1 Time Limit: 1000MS Memory limit: 32768K 题目描述     倾国倾城的大家闺秀潘小姐要选夫婿啦!武林中各门各派,武林外各大户人家,闻讯纷纷前来,强势围观 ...

  2. 3D Math Library的姿势

    http://www.opentk.com/doc/math http://www.gamedev.net/topic/484756-fast-vector-math-library-for-net/ ...

  3. jquermobile 安装

    代码 <script src="../Public/js/jquery-1.11.1.min.js"></script> <script src=&q ...

  4. MBProgressHUD+FastCall

    + (void)showHudTipStr:(NSString *)tipStr; + (void)showHudTipStr:(NSString *)tipStr{ ) { MBProgressHU ...

  5. 创建自己的Activity

    创建自己的Activity 1.新建class,继承Activity类 2.重写新建类的onCreate 方法 public class SecondActivity extends Activity ...

  6. JMeter 安装与使用基本教程

    JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试.性能测试和压力测试的工具. 什么是JMeter? JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100% ...

  7. Ubuntu 源码安装 nginx 1.9.2

    安装前准备: //更新系统 1.sudo apt-get update //安装pcre包 2.sudo apt-get install libpcre3 libpcre3-dev   3.sudo  ...

  8. mysql 定义function rand

    MySQL获取随机数   如何通过MySQL在某个数据区间获取随机数? MySQL本身提供一个叫rand的函数,返回的v范围为0 <= v < 1.0. 介绍此函数的MySQL文档也介绍道 ...

  9. Linux服务器管理: 日志管理(一)

    1.日志管理介绍: a.日志服务:在CentOS6.x中日志服务以及由rsyslogd取代了原有的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日子文件的格 ...

  10. TP框架整合Swagger UI接口文档

    1.下载swagger ui:http://swagger.io/swagger-ui/: 2.在应用目录里新建一个目录xxx:如图 3.解压后把dist目录的所有文件拷贝到新建的目录里面: 4.在新 ...