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基础篇之初识Python必看攻略
Jun 23 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
微信跳一跳自动运行python脚本
Jan 08 Python
Python 中Pickle库的使用详解
Feb 24 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
基于python连接oracle导并出数据文件
Apr 28 Python
Django 解决distinct无法去除重复数据的问题
May 20 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
PHP 获取文件权限函数介绍
2013/07/11 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
2016/06/07 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
Python新手实现2048小游戏
2015/03/31 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python中装饰器高级用法详解
2017/12/25 Python
Python数学形态学实例分析
2019/09/06 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
Europcar比利时:租车
2019/08/26 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
校庆标语集锦
2014/06/25 职场文书
环境保护建议书
2014/08/26 职场文书
共青团员自我评价范文
2014/09/14 职场文书
秋冬农业生产标语
2014/10/09 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
学会Python数据可视化必须尝试这7个库
2021/06/16 Python
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript