linux优先级队列,Python3 线程优先级队列( Queue)

导读

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

0094ddc8c489be1dbfa1fffe20eccbaf.png

这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步。

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() 实际上意味着等到队列为空,再执行别的操作

实例:

#!/usr/bin/python3

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 ("退出主线程")

以上程序执行结果:

开启线程:Thread-1

开启线程:Thread-2

开启线程:Thread-3

Thread-3 processing One

Thread-1 processing Two

Thread-2 processing Three

Thread-3 processing Four

Thread-1 processing Five

退出线程:Thread-3

退出线程:Thread-2

退出线程:Thread-1

退出主线程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泛泰A860(高通公司8064 cpu 1080p) 拂4.4中国民营recovery TWRP2.7.1.2文本(通过刷第三版)...

专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo crazyi(天下无雪) windxixi(雪狐) wangsai008 组成) 说说中文TWRP的简史: 中文TWRP是本人在2012.10月在原英文TWRP的基础上首次改…

电脑机箱cad图纸_如何批量打印高清黑白CAD图纸?这么好用的方法现在才知道

工作中为了更方便查看和传阅CAD图纸,经常要将CAD图纸打印出来,有时候要打印很多张,而且还不是最终定稿!如果打印成彩印也太浪费墨水了!所以批量打印黑白图纸的技巧就显得十分重要啦!很多小伙伴们都不知道怎…

Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP

D. Painting The WallUser ainta decided to paint a wall. The wall consists of n2 tiles, that are arranged in an n  n table. Some tiles are painted, and the others are not. As he wants to paint it beautifully, he will follow the rules below. Firstly user a…

ahp层次分析法_基于层次分析法(AHP)的店铺选址应用研究

导读在连锁行业,店铺选址是其中很重要的一个方面。影响店铺选址的指标(因素)很多,决策中经常需要对店铺影响各指标进行量化分析。本文应用层级分析法(AHP),对影响店铺选址的指标(因素)权重进行量化分析,以帮助决策者从备选的多个店…

python批量删缩进_鬼畜小姐姐+野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?...

鬼畜小姐姐野狼disco,十分钟教你如何用Python剪辑一个牛逼的抖音小视频?前言半个月前,后台有个小伙伴问我,如何将视频中的音频提取出来,并且将声音转成文字写入到 word 中,正好接下来的文章要用到百度的语音…

数据结构:点之间的最短距离--Floyd算法

Floyd算法 Floyd算法 Dijkstra算法是用于解决单源最短路径问题的,Floyd算法则是解决点对之间最短路径问题的。Floyd算法的设计策略是动态规划,而Dijkstra採取的是贪心策略。当然,贪心算法就是动态规划的特例。 算法思想 点对之间的最短路径仅…

shell 获取家目录_一篇教会你写90%的shell脚本

shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行…

数据结构c语言版第四章题库,数据结构(C语言版)(第4版)习题

数据结构(C语言版)(第4版)习题 习题 11.1 选择题。(1)计算机识别、存储和加工处理的对象统称为 。A.数据 B.数据元素 C.数据结构 D.数据类型(2)数据结构通常是研究数据的 及它们之间的联系。A.存储和逻辑结构 B.存储和抽象 C.理想和抽象 D.理想和逻辑(3)…

C++刷称号——2707: 素数与要素

Description 从键盘输入的随机整数n,如果n不是质数,然后计算n所有的因素(不含1)。例如,对于16,出口2,4,8;否则输出“It is a prime number.” 推断素数和需求因素已完成功能。 Input 随机整数n …

python opencv输出mp4_Python玩转视频处理(四):视频按场景进行分割

在上一篇文章(python在手,女神视频轻松有)分享了用AI人脸识别技术标记人物出现时间点来截取视频片段的教程,它的局限性在于只能通过识别特定的对象(比如人脸)来操作。在本文中将分享一个按场景进行分割视频…

stm32 isp下载官方软件android_OpenCanvas免费版下载_OpenCanvas绘图软件官方版下载7.0.25...

OpenCanvas 是一款小巧的CG手绘软件,让用户在使用数位板在电脑上绘图时,就像是在纸上手绘一样,可以画出极为细致的图像。OpenCanvas功能简捷、体积小巧、运行速度快,大家可以很快上手,非常适合入门级手绘爱好者使用。对…

【转】图文详解YUV420数据格式

YUV格式有两大类:planar和packed。 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。 YUV,分为三个分…

python安装pip_在MAC下安装pip,并关联到相应的python版本

在MAC下安装pip,并关联到相应的python版本 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 不多说了,说就是电脑重…

cat命令详解_好程序员Python培训之详解eval好与坏

好程序员Python培训之详解eval好与坏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧。eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的…

对代理商的评价怎么写_简历中的自我评价怎么写才能更吸引人?

有统计报告显示:HR每天看到的职位简历至少1000,每封简历的停留时间不过10秒。在这么短的时间内,让hr印象深刻,自我评价的价值就出现啦!不少人认为自我评价要幽默风趣,例如:“您都看到这儿了&…

sdk是什么_人脸识别在美颜SDK中存在什么意义?

在得益于短视频、直播平台的飞速发展下,美颜SDK也得到了很大的发展,变得越来越受欢迎。美颜SDK现在已经融入到我们的生活,是社交中必不可少的工具。现在人们对于美颜的要求越来越高,这就意味着美颜SDK的质量也要越来越好。而人脸识…

socket工具android,Android通过socket长连接实现推送

工具:Android studio软件方法及协议:socket、protobuf实现原理:通过本地建立一个socket,绑定服务器IP和port,然后connect,再开启另外线程定时心跳(注意这里的心跳不是自定义发送数据,而是采用so…

一行代码为UITextField添加收键盘功能

iOS开发中收键盘是十分常用的功能,只需一行代码即可为ViewController添加工具条收键盘功能 更重要的是使用catogory,无代码污染。 代码 // UITextFieldkeyboard.h // TextFieldKeyBord // // Created by luo.h on 15/10/8. // Copyright © 2015…

excel一列求和_【excel每日提升】Excel周日不排班!

【新朋友】点击标题下面蓝色字“王俊东“关注。 【老朋友】点击右上角,转发或分享本页面内容。excel系列课程excel特效系列课程!第1节:Excel有公式的单元格标记颜色,很简单!第2节:Excel删除空行&#xff0…

android 减速动画,Android View Animation

概述可译为视图动画&#xff0c;分为缩放动画平移动画渐变动画旋转动画Android系统中定义了一个抽象类Animation来定义这种视图动画&#xff0c;它的具体子类如下表&#xff1a;动画名称对应的子类xml中标签描述缩放动画ScaleAnimation< scale />S平移动画TranslateAnima…