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 相关文章推荐
从零学Python之入门(三)序列
May 25 Python
python分析nignx访问日志脚本分享
Feb 26 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
简单了解python的内存管理机制
Jul 08 Python
详解用python生成随机数的几种方法
Aug 04 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
Python astype(np.float)函数使用方法解析
Jun 08 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
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
PHP连接SQL server数据库测试脚本运行实例
2020/08/24 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
ES6中异步对象Promise用法详解
2019/07/31 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
[04:10]2018年度CS GO玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
python3+PyQt5实现自定义流体混合窗口部件
2018/04/24 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
对python生成业务报表的实例详解
2019/02/03 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
Django数据库操作之save与update的使用
2020/04/01 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
英国网上购买肉类网站:Great British Meat
2018/10/17 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
酒店总经理岗位职责范本
2014/08/08 职场文书
九一八事变演讲稿
2014/09/05 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
教务处干事工作总结
2015/08/14 职场文书
基于PyQt5制作一个群发邮件工具
2022/04/08 Python