Python公开课 - 标准库queue基本使用

前言

在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性。

基本介绍

Python标准库中的queue模块实现了多生产者,多消费者队列。

当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。Queue模块中的类实现了所有必需的锁定语义。

这取决于Python中线程支持的可用性; 看threading 模块。

该模块实现了三种类型的队列,它们的区别仅在于取条目的顺序。

  • FIFO 队列,即先进先出队列,添加的第一个条目是第一个取出的条目
  • LIFO队列中,最近添加的条目是第一个取出的(像堆栈一样运行)
  • 使用优先级队列,条目将保持排序(使用heapq模块),并首先检索最低值的条目

构造三种队列

在Python中,可以通过以下方式构造上述三种队列

  1. Python queue模块的FIFO队列先进先出。 class queue.Queue(maxsize)
  2. LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)
  3. 优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)

queue模块中的常用方法

  • 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() 表示以前排队的任务已完成。由队列使用者线程使用。对于每个get()用于获取任务的人,后续调用 task_done()告诉队列任务的当前条目处理完成。
  • queue.join() 实际上意味着等到队列为空,再执行别的操作

示例说明

import queue
import threading

def worker():
    while True:
        item = q.get()
        if item is None:
            break
        #do_work(item)
        print(item)
        q.task_done()

num_worker_threads=3
q = queue.Queue()
threads = []
for i in range(num_worker_threads):
    t = threading.Thread(target=worker)
    t.start()
    threads.append(t)

for item in range(10):
    q.put(item)

# block until all tasks are done
print ('wating_process')
q.join()
print ('queue_done')

# stop workers
for i in range(num_worker_threads):
    q.put(None)
for t in threads:
    t.join()
print ('exit')

相关主题:
相关推荐
  1. 北京市私立树人学校小学部
  2. 脱单!武汉的相亲角在哪你知道吗?
  3. 惠州市惠东县平山中学
  4. 嘉兴市王店中学
  5. 小猫种鱼
  6. 宝宝为何喜欢吃手 - 育儿经验
  7. Python公开课 - 爬虫之网页结构
  8. Ubuntu下使用Apache Bench对网站进行压力测试
  9. 佛山市张槎弼唐小学
  10. 伊儿、雪人和琪琪兔一家
  11. 苏州市商业职工子弟小学
  12. Python源码剖析 - Python中的整数对象
  13. 武汉动物园火烈鸟孔雀排队打疫苗
  14. 武汉推出越王勾践剑交通卡
  15. Python的起源 - 二十年前的故事
  16. 害怕影子的人
  17. 猫怕老鼠
  18. NumPy - 简明教程(中)
  19. 金灵子双语幼儿园 - 廊坊幼儿园黄页
  20. 百名网媒总编辑登上知音号欣赏武汉夜色
  21. 解决Python json.dumps中文字符乱码问题
  22. 湖北将发放消费券 - 武汉新鲜事
  23. 长沙市芙蓉路学校
  24. 奥迪客户不满加价,被武汉4S店销售群殴
  25. 成都市金琴路小学
  26. ImageMagick将图像转换为300dpi的两种方式
  27. 武汉一女子七天被骗220万
  28. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  29. 小白兔智战大老虎
  30. 莆田荔城区实验三小
  31. 榆林市榆阳区光华幼儿园 - 榆林市幼儿园黄页
  32. Python公开课 - Ubuntu 升级到Python3.6及对应的pip
  33. 武汉市江岸区海丽达航天双城幼儿园 - 武汉幼儿园黄页
  34. 长沙市宁乡县煤炭坝镇贺石桥中学
  35. 上海市飞尔幼儿园 - 上海幼儿园黄页
  36. 上海市浦东新区南码头小学
  37. Python公开课 - 全文检索模块Whoosh详解(1)
  38. 南宁市横县蓓蓓幼儿园 - 南宁幼儿园黄页
  39. 人不可貌相海水不可斗量
  40. 东方爱婴自然博物馆示范中心 - 西安幼儿园黄页
  41. 九江学院附属中学(九江市第七中学)
  42. 湖北省潜江中学
  43. 泰安市长城中学
  44. Python语言的优点和缺点 - 深度剖析
  45. 还童石
  46. 车水马龙
  47. 上海市刘行新华实验学校
  48. 北京景山学校远洋分校
  49. 看鸡人格瑞得的一家
  50. 北京市第十五中学分校
  51. 厦门六中学
  52. 合肥市新街小学
  53. 武汉00后大二学妹拍视频月入七十万
  54. 重庆市北碚区和欣佳幼儿园 - 重庆幼儿园黄页
  55. 荣昌县峰高中学
  56. 大连市甘井子区蓝精灵幼儿园 - 大连幼儿园黄页
  57. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  58. 威力巨大的核试验
  59. 海口市金色童年幼儿园 - 海南省幼儿园黄页
  60. 无锡市新安实验小学