导读

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

实例:

#!/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

退出主线程

linux优先级队列,Python3 线程优先级队列( Queue)相关推荐

  1. linux下java转储线程_Java线程转储prio值与linux上的真实线程优先级不对应?

    我打算在我的 Java代码中使用线程优先级. 应用程序应在我的 Linux系统上运行: >uname -a Linux 3.0.0-15-generic #26-Ubuntu SMP x86_6 ...

  2. java设置子线程优先级_Java 实例 - 线程优先级设置

    Java 实例 - 线程优先级设置 以下实例演示了如何通过setPriority() 方法来设置线程的优先级: SimplePriorities.java 文件 public class Simple ...

  3. java最高线程优先级是,Java线程优先级

    详细内容 Java 线程优先级 Thread 类中,使用如下属性来代表优先级.private int priority; 我们可以通过 setPriority(int newPriority) 来设置 ...

  4. C# 模拟一个处理消息队列的线程类 Message Queue

    1 // 模拟一个处理消息队列的类 2 class MessageHandler 3 { 4 // 消息队列 5 private Queue<string> messageQue = ne ...

  5. 【C/C++调整线程优先级】

    线程优先级 前言 一.线程优先级设置 常用函数 1. pthread_attr_init函数: 2. pthread_attr_setinheritsched函数: 3. pthread_attr_s ...

  6. 【C++ 语言】线程安全队列 ( 条件变量 | 线程调度 )

    文章目录 I . 线程简单使用 II . 互斥锁 III . 条件变量 线程同步 IV . 完整代码示例 006_ThreadSafeQueue.h 006_ThreadSafeQueue.cpp S ...

  7. 了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑

    Java 多线程系列第 6 篇. 这篇我们来看看 Java 线程的优先级. Java 线程优先级 Thread 类中,使用如下属性来代表优先级. private int priority; 我们可以通 ...

  8. c语言怎么设置cpu优先级,线程优先级,设置,setPriority()方法

    package seday08.thread; /** * @author xingsir * 线程优先级 * 线程启动后纳入到线程调度,线程时刻处于被动获取CPU时间片而无法主动获取.我们可以通过调 ...

  9. java多线程优先级的方法_Java多线程以及线程优先级

    文章目录 1 继承Thread类多线程的实现获取和设置线程名称线程优先级 2 实现Runnable接口3 实现Callable接口4 使用线程池 1 继承Thread类 多线程的实现 实现多线程只需要 ...

最新文章

  1. pandas 中 的drop函数
  2. 习题7-2 求一批整数中出现最多的个位数字 (20分)
  3. GPT(Improving Language Understandingby Generative Pre-Training) 论文笔记
  4. redis的内存会不会耗尽
  5. js 拉勾网效果_借助JShaman,建立自己的JS代码混淆平台
  6. 广州牵引力教育详细分析学习Java能从事前端开发吗?
  7. 图像处理系统概述(白皮书)
  8. luogu2668 luogu2540 斗地主(以及增强版)
  9. tftp服务器权限配置文件,tftp服务器权限配置
  10. (重读)JavaScript高级程序设计第四版
  11. 金蝶k3服务器系统吗,金蝶k3server2008服务器配置
  12. JAVA环境变量的设置及修改
  13. FlashFXP 4.2.4 破解版
  14. 论文写作 2: 常见的 Latex 格式文件
  15. Percent Library百分比布局详解
  16. 计算机科学留学硕士工资,揭晓美国大学研究生毕业起薪TOP50排行榜单 你选对了吗?...
  17. Linux命令之who命令的使用
  18. 巨细!小姐姐告诉你关于 BeautifulSoup 的一切(上)!
  19. MySQL高级:(十五)其他数据库日志
  20. Microsoft DreamSpark (微软向大学生免费提供开发软件)

热门文章

  1. oracle 10 expdp impdp 导入、导出
  2. 发布服务器 bugzilla, streber 数据库备份方案
  3. Java 的Tuple(类似.net等的元组)
  4. java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...
  5. 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  6. PHP5比PHP4,php4和php5的配置异同比较
  7. 小程序·云开发实战 - 校园约拍小程序
  8. 面试题5,接口和抽象类的区别
  9. 【论文阅读】Deep Adversarial Subspace Clustering
  10. 算法训练 6-1 递归求二项式系数值