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实现简单QQ单用户机器人的方法
Jul 03 Python
python中redis的安装和使用
Dec 04 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
Python多进程multiprocessing.Pool类详解
Apr 27 Python
Django forms组件的使用教程
Oct 08 Python
Python中字符串List按照长度排序
Jul 01 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python标准库os库的函数介绍
Feb 12 Python
python把一个字符串切开的实例方法
Sep 27 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
PHP后期静态绑定实例浅析
2018/12/21 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python flask中静态文件的管理方法
2018/03/20 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
Python实现网站表单提交和模板
2019/01/15 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python模块常用用法实例详解
2019/10/17 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
django model object序列化实例
2020/03/13 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
法律系毕业生自荐信范文
2014/03/27 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
关于旅游的活动方案
2014/08/15 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
python中24小时制转换为12小时制的方法
2021/06/18 Python