广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python线程之线程安全的队列Queue
  • 247
分享到

Python线程之线程安全的队列Queue

2024-04-02 19:04:59 247人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是队列?二、队列基操 入队/出队/查队列状态三、Queue是一个线程安全的类一、什么是队列? 像排队一样,从头到尾排成一排,还可以有人继续往后排队,这就是队列。 这里学委

一、什么是队列?

像排队一样,从头到尾排成一排,还可以有人继续往后排队,这就是队列。

这里学委想说的是Queue这个类, 它是queue这个内置模块内的一个类。

import queue
q = queue.Queue(5) #可以传入参数指定队列大小
queue.Queue()# 不传或者给0或者<0的数字则创建一个无限长度的队列

它提供了很多函数,下面几个函数,我们使用的比较多:

  • get: 获取并移除队头元素,就是出队
  • put: 往队列末尾加入元素,也就是后来者排队
  • qsize: 获取队列的长度
  • empty: 队列空了,没有人在排了
  • full: 队列满了。

看着比较枯燥,学委画了下图展示:

这个队列put了3次,依次放入:持续学习,持续开发,我雷学委。队列长度为3

二、队列基操 入队/出队/查队列状态

准备了下面的代码:

import queue

q = queue.Queue(5)

print("学委粉丝队列:", q)
print("空队,学委粉丝队列大小:", q.qsize())
print("空队列?", q.empty())
for i in range(5):
    q.put(i)

print("队列满了?", q.full())
print("排满了,学委粉丝队列大小:", q.qsize())

while not q.empty():
    print("粉丝 %s 出队点赞!" % q.get())
print("最后,学委粉丝队列大小:", q.qsize())

这段代码创建了一个长的为5的队列。

然后一个循环写满队列,接着再依此出队,粉丝出队点赞。

下面是运行效果:

是不是很简单。

三、Queue是一个线程安全的类

前面几篇文章,碰到下面的代码(反复读写共享变量)结果总是出乎依赖!

amount = 100
def transfer(money):
    global amount
    for i in range(100000):
        amount += money

如果我们对队列进行反复读写,会不会出现问题呢?

不妨,写个代码验收一下:

import queue
import threading

xuewei_fans_q = queue.Queue()


def transfer(money):
    for i in range(100000):
        xuewei_fans_q.put(money)
        xuewei_fans_q.get()


# 创建4个任务重复给学委加关注/脱粉(还是希望各位编程的明日之星跟着学习,共同进步!)
t_group = []
for i in range(10):
    t = threading.Thread(target=lambda: transfer(-1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(-1))
    t_group.append(t)
    t.start()
    t = threading.Thread(target=lambda: transfer(1))
    t_group.append(t)
    t.start()

for t in t_group:
    t.join()
print("-" * 16)
print("活跃线程数:", threading.active_count())
print("活跃线程:", threading.current_thread().name)
#反复对队列进行添加数据,移除数据,队列最后清零了
print("学委粉丝队列:", xuewei_fans_q.qsize())

不管运行多少次,队列(希望是黑粉队列)都为0元素。

总结:
本篇学委分享了一个线程安全的队列Queue,这个非常重要!但是队列Queue这个类是线程安全的,这个是经过验证的

到此这篇关于python线程之线程安全的队列的文章就介绍到这了,更多相关Python线程安全队列内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python线程之线程安全的队列Queue

本文链接: https://www.lsjlt.com/news/140348.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python线程之线程安全的队列Queue
    目录一、什么是队列?二、队列基操 入队/出队/查队列状态三、Queue是一个线程安全的类一、什么是队列? 像排队一样,从头到尾排成一排,还可以有人继续往后排队,这就是队列。 这里学委...
    99+
    2022-11-13
  • Python实现线程池之线程安全队列
    目录一、线程池组成二、线程安全队列的实现三、测试逻辑3.1、测试阻塞逻辑3.2、测试读写加锁逻辑本文实例为大家分享了Python实现线程池之线程安全队列的具体代码,供大家参考,具体内...
    99+
    2022-11-11
  • Python中线程安全队列Queue的示例分析
    小编给大家分享一下Python中线程安全队列Queue的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是队列?像排队一样,从头到尾排成一排,还可以有人继续往后排队,这就是队列。这里学委想说的是Queue这个...
    99+
    2023-06-29
  • C++线程安全的队列是什么
    这篇文章将为大家详细讲解有关C++线程安全的队列是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。无界队列#include<queue>#include<mutex>#inclu...
    99+
    2023-06-29
  • Python线程之认识线程安全
    目录一、什么是线程安全?二、在Python中有哪些类是线程安全的?三、如何做到真正线程安全?1.无状态函数2.另一种 化繁为简一、什么是线程安全? 线程安全,名字就非常直接,在多线程...
    99+
    2022-11-13
  • Python的线程使用队列Queue来改造转账场景
    目录一、看看转账场景的问题二、这种问题怎么使用队列来解决呢?三、总结前篇我们了队列Queue和转账场景这次趁热学委展示一下使用队列解决转账场景的问题。 一、看看转账场景的问题 前面有...
    99+
    2022-11-13
  • C++线程安全的队列你了解嘛
    目录无界队列有界队列总结 无界队列 #include<queue> #include<mutex> #include<condition_variabl...
    99+
    2022-11-13
  • 如何理解Python3线程优先级队列Queue
    这期内容当中小编将会给大家带来有关如何理解Python3线程优先级队列Queue,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIF...
    99+
    2023-06-05
  • Python+多线程+队列爬虫
    Python+多线程+队列,爬虫例子 # -*- coding: utf-8-*- import urllib2 import urllib import json import time import datetime import t...
    99+
    2023-01-31
    爬虫 队列 多线程
  • python队列基本操作和多线程队列
    目录一、队列基本操作二、多线程队列一、队列基本操作 from queue import Queue q = Queue(5)  # 创建一个容量为5的队列。如果给一个小于0的数,则...
    99+
    2022-11-13
  • python浅谈一下线程间通信之队列
    目录为什么需要线程间通信线程间通信方式有哪些线程间通信案例之队列总结为什么需要线程间通信 一个人的力量是有限的,但是团队合作可以发挥更大的作用。而团队协作需要交流和通信来有效的分配任...
    99+
    2023-05-17
    Python线程通信 Python线程通信队列 python队列
  • Java多线程案例之阻塞队列
    文章目录 一. 认识阻塞队列1. 什么是阻塞队列2. 生产者消费者模型3. 标准库中阻塞队列类 二. 基于循环队列实现的简单阻塞队列1. 循环队列的简单实现2. 阻塞队列的简单实现 ...
    99+
    2023-09-01
    java 面试 阻塞队列 生产者消费者模型 多线程
  • Java多线程之线程安全问题
    文章目录 一. 线程安全概述1. 什么是线程安全问题2. 一个存在线程安全问题的程序 二. 线程不安全的原因和线程加锁1. 案例分析2. 线程加锁2.1 理解加锁2.2 synchroni...
    99+
    2023-09-21
    java 线程安全 多线程 synchronized jvm
  • 生产者与消费者+Queue(线程安全)
    from queue import Queue from lxml import etree import requests from urllib import request from threading import Thread...
    99+
    2023-01-30
    生产者 线程 消费者
  • Java多线程之线程安全问题详情
    目录1.线程安全概述1.1什么是线程安全问题1.2一个存在线程安全问题的程序2.线程加锁与线程不安全的原因2.1案例分析2.2线程加锁2.2.1什么是加锁2.2.2如何加锁2.2.3...
    99+
    2022-11-13
  • java多线程之线程安全(重点,难点)
    线程安全 1. 线程不安全的原因:1.1 抢占式执行1.2 多个线程修改同一个变量1.3 修改操作不是原子的锁(synchronized)1.一个锁对应一个锁对象.2.多个锁对应一个锁对象.2.多个锁对应多个锁对象.4. 找出代码错...
    99+
    2023-08-17
    java jvm 开发语言
  • Java多线程之线程安全问题详解
    目录1. 什么是线程安全和线程不安全?2. 自增运算为什么不是线程安全的?3. 临界区资源和竞态条件总结:面试题: 什么是线程安全和线程不安全?自增运算是不是线程安全的?如何保证多线...
    99+
    2022-11-13
  • Java多线程案例之阻塞队列详解
    目录一.阻塞队列介绍1.1阻塞队列特性1.2阻塞队列的优点二.生产者消费者模型2.1阻塞队列对生产者的优化三.标准库中的阻塞队列3.1Java提供阻塞队列实现的标准类3.2Block...
    99+
    2022-11-13
    Java多线程阻塞队列 Java 阻塞队列 Java多线程
  • Java多线程之多种锁和阻塞队列
    目录一、悲观锁和乐观锁1.1. 乐观锁1.2. 悲观锁二、公平锁和非公平锁三、可重入锁(递归锁)四、自旋锁五、独占锁(写)/共享锁(读)六、什么是阻塞队列?七、阻塞队列(Blocki...
    99+
    2022-11-12
  • python多线程的线程如何安全实现
    1、引言 当前随着计算机硬件的快速发展,个人电脑上的 CPU 也是多核的,现在普遍的 CUP 核数都是 4 核或者 8 核的。因此,在编写程序时,需要为了提高效率,充分发挥硬件的能力,则需要编写并行的程序。Java ...
    99+
    2022-06-02
    python 多线程 线程安全
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作