python队列基本操作和多线程队列

 更新时间:2022年02月10日 11:55:47   作者:侯小啾   
pythonQueue队列模块提供了同步线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue,这些队列都实现了锁原语,能够在多线程中直接使用,可以使用队列来实现线程间的同步,下面我们就来看看python队列基本操作吧

一、队列基本操作

from queue import Queue

q = Queue(5)  # 创建一个容量为5的队列。如果给一个小于0的数,则队列为无限大小。(这是官方的解释,实际不是无限大小,而是跟内存有关)

# 存储数据
q.put(123)  # 数值 
q.put('hello world!')  # 字符串
q.put(['hello', 'world'])  # 列表
q.put(('hello', 'world'))  # 元组
q.put({'hello': 'world'})  # 字典

# 如果再试图存储第六个,则会发生阻塞,因为容量已设定为5
# q.put({'hello': 'python'})

取出队列中的值:

print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())

如图五个值被依次取出。Queue队列遵循的是先进先出。

q.put_nowait()

q.put_nowait()方法可以无阻碍地向队列中添加内容,如果队列已满则会立即报错,不会等待(即不会发生阻塞)。

q.get_nowait()

q.get_nowait()方法可以无阻碍地从队列中取出内容,如果队列是空的则也会直接报错,不会等待。
具体使用不再示例。

查看队列当前大小

q.qsize()

print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())
print(q.get())
print(q.qsize())

如图,每取出一个值,队列大小就减一。同样每存入一个值队列大小就会加一。

q.full()

判断队列是否是满的。

q.empty()

判断队列是否是空的。

print(q.full())
print(q.get())
print(q.get())
print(q.full())
print(q.empty())
print(q.get())
print(q.get())
print(q.get())
print(q.empty())

二、多线程队列

from queue import Queue
import threading
import time


# 存储值,每隔一秒存储一个
def set_value(q):
    num = 0
    while True:
        q.put(num)
        num += 1
        time.sleep(1)

# 取值,不间断地取
def get_value(q):
    while True:
        print(q.get())


if __name__ == '__main__':
    q = Queue(4)
    t1 = threading.Thread(target=set_value, args=(q, ))
    t2 = threading.Thread(target=get_value, args=(q, ))

    t1.start()
    t2.start()

程序开始运行,一边存储,一边取值:

此思想应用在爬虫上,即一边访问并获取数据,一边下载数据。

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

相关文章

  • 用Python实现一个打字速度测试工具来测试你的手速

    用Python实现一个打字速度测试工具来测试你的手速

    有很多小伙伴们都苦恼自己手速不够,今天特地整理了这篇文章,教你用Python实现一个打字测试工具来测试你的打字速度,文中有非常详细的代码示例,对想练手速的小伙伴们很有用哦,需要的朋友可以参考下
    2021-05-05
  • python+Selenium自动化测试——输入,点击操作

    python+Selenium自动化测试——输入,点击操作

    这篇文章主要介绍了python+Selenium自动化测试——输入,点击操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 总结几个非常实用的Python库

    总结几个非常实用的Python库

    Python一直被自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用. 除了内建的模块外,Python还有大量的第三方模块,直接使用pip安装即可使用.下面给大家简单介绍几个Python非常实用的自带库和第三方库,需要的朋友可以参考下
    2021-06-06
  • vscode 与pycharm 配置 autopep8自动格式化代码

    vscode 与pycharm 配置 autopep8自动格式化代码

    autopep8是一个可以将Python代码自动排版为PEP8风格第三方包,使用它可以轻松地排版出格式优美整齐的代码,这里就为大家分享一下具体的方法
    2023-09-09
  • Python3实现旋转数组的3种算法小结

    Python3实现旋转数组的3种算法小结

    旋转数组是一种常见的数据结构问题,通常是指一个有序数组经过旋转后,使得所有元素逆序排列,本文主要介绍了Python3实现旋转数组的3种算法小结,感兴趣的可以了解一下
    2023-12-12
  • 通过python连接Linux命令行代码实例

    通过python连接Linux命令行代码实例

    这篇文章主要介绍了通过python连接Linux命令行代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python3 伪装浏览器的方法示例

    Python3 伪装浏览器的方法示例

    本篇文章主要介绍了Python3 伪装浏览器的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Python下opencv图像阈值处理的使用笔记

    Python下opencv图像阈值处理的使用笔记

    这篇文章主要介绍了Python下opencv图像阈值处理的使用笔记,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python基本运算几何运算处理数字图像示例

    Python基本运算几何运算处理数字图像示例

    这篇文章主要介绍了Python基本运算,同个几个几何运算处理数字图像示例来为大家详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • 使用python写的opencv实时监测和解析二维码和条形码

    使用python写的opencv实时监测和解析二维码和条形码

    这篇文章主要介绍了使用python写的opencv实时监测和解析二维码和条形码,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论