Python多线程 Queue 模块常见用法


Posted in Python onJuly 04, 2021

queue介绍

queue是python中的标准库,俗称队列,可以直接import 引用,在python2.x中,模块名为Queue
在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性

Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。
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() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作

import threading
import time

def a():
    print("a start\n")
    for i in range(10):
        time.sleep(0.1)
    print("a finish\n")
def b():
    print("b start\n")
    print("b finish\n")
def main():
    # t=threading.Thread(target=a,name="T")
    t = threading.Thread(target=a)
    t2=threading.Thread(target=b)
    t.start()
    t2.start()
    # t2.join()
    # t.join()
    print("all done\n")
if __name__ == '__main__':
    main()

Queue 模块:

import queue
import threading
import time

exitFlag = 0

class myThread (threading.Thread):
    def __init__(self, threadID, name, q):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.q = q
    def run(self):
        print ("开启线程:" + self.name)
        process_data(self.name, self.q)
        print ("退出线程:" + self.name)

def process_data(threadName, q):
    while not exitFlag:
        queueLock.acquire()
        if not workQueue.empty():
            data = q.get()
            queueLock.release()
            print ("%s processing %s" % (threadName, data))
        else:
            queueLock.release()
        time.sleep(1)

threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = queue.Queue(10)
threads = []
threadID = 1

# 创建新线程
for tName in threadList:
    thread = myThread(threadID, tName, workQueue)
    thread.start()
    threads.append(thread)
    threadID += 1

# 填充队列
queueLock.acquire()
for word in nameList:
    workQueue.put(word)
queueLock.release()

# 等待队列清空
while not workQueue.empty():
    pass

# 通知线程是时候退出
exitFlag = 1

# 等待所有线程完成
for t in threads:
    t.join()
print ("退出主线程")

到此这篇关于Python多线程 Queue 模块的文章就介绍到这了,更多相关Python Queue 模块内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
matplotlib设置legend图例代码示例
Dec 19 Python
查看python下OpenCV版本的方法
Aug 03 Python
python获取交互式ssh shell的方法
Feb 14 Python
python覆盖写入,追加写入的实例
Jun 26 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 Python
python调用win32接口进行截图的示例
Nov 11 Python
python 检测图片是否有马赛克
Dec 01 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
pytorch交叉熵损失函数的weight参数的使用
May 24 Python
详解解Django 多对多表关系的三种创建方式
Aug 23 Python
python 中yaml文件用法大全
Jul 04 #Python
python3实现常见的排序算法(示例代码)
用Python编写简单的gRPC服务的详细过程
Jul 04 #Python
python中__slots__节约内存的具体做法
Jul 04 #Python
python中Matplotlib绘制直线的实例代码
Jul 04 #Python
C站最全Python标准库总结,你想要的都在这里
Python实现列表拼接和去重的三种方式
Jul 02 #Python
You might like
德生S2000电路分析
2021/03/02 无线电
用header 发送cookie的php代码
2007/03/16 PHP
PHP insert语法详解
2008/06/07 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
javascript 写类方式之八
2009/07/05 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
解决python 输出到csv 出现多空行的情况
2021/03/24 Python
运动会加油稿100字
2014/09/19 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
学习计划是什么
2019/04/30 职场文书
Fluentd搭建日志收集服务
2022/09/23 Servers