导读

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. tcp/ip 协议栈Linux源码分析三 IPv4分片报文重组分析三
  2. 03.full_text interval查询
  3. 什么是Spring Integration?
  4. 【spider】多线程爬虫
  5. Python int函数 - Python零基础入门教程
  6. Ubuntu 14.04 安装配置 cairo-dock 实现美化+特效
  7. 好友助力功能php开发,微开讲_帮助中心
  8. mysql 查询缓存及设置
  9. Python 音频: sounddevice 使用 左声道/右声道/立体声 --- 播放,录音
  10. 程序员入门必备经典书单
  11. Arm中国换帅风波始末 | 钛媒体深度
  12. 为什么入侵地球的总是火星人,是别的星球不够努力吗?
  13. 计算机科技手抄报内容,科技手抄报内容-科技在我身边
  14. 二十三、正则表达式中的“r”含义
  15. net-java-php-python-伊犁旅游网站计算机毕业设计程序
  16. 安装Anaconda出现Error opening file for writing错误最简单有效的办法
  17. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)
  18. java如何让线程sheep_Java面试知识点之线程篇(三)
  19. C语言常用的系统函数
  20. mac无法通过触摸版、无法通过鼠标拖曳文件?

热门文章

  1. android butterknife使用详解
  2. Netcdf文件导出基本代码示例
  3. webflux上传下载文件
  4. java enumerator_NSEnumerator使用
  5. unity2018关联不到vs_现实VS真爱:远嫁的幸福和悲哀
  6. 统计HDFS文件数量,大小,以及在某范围大小的文件数量
  7. npm run build后如何打开index.html跑起项目
  8. Java异常处理原则与技巧总结
  9. Django之ORM
  10. Maven国内镜像 Maven阿里云镜像