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队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tensorflow1.x和tensorflow2.x中的tensor转换为字符串的实现

    tensorflow1.x和tensorflow2.x中的tensor转换为字符串的实现

    本文主要介绍了tensorflow1.x和tensorflow2.x中的tensor转换为字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python利用IPython提高开发效率

    Python利用IPython提高开发效率

    本文详细介绍了在python中如何利用ipython提高代码开发效率,对大家使用python很有帮助,有需要的小伙伴们可以参考借鉴。
    2016-08-08
  • Python装饰器简单用法实例小结

    Python装饰器简单用法实例小结

    这篇文章主要介绍了Python装饰器简单用法,结合实例形式总结分析了Python装饰器的基本功能、简单用法及相关操作注意事项,需要的朋友可以参考下
    2018-12-12
  • 关于keras中的Reshape用法

    关于keras中的Reshape用法

    这篇文章主要介绍了关于keras中的Reshape用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python捕获全局的KeyboardInterrupt异常的方法实现

    Python捕获全局的KeyboardInterrupt异常的方法实现

    KeyboardInterrupt异常是Python中的一个标准异常,它通常发生在用户通过键盘中断了一个正在运行的程序,本文主要介绍了Python捕获全局的KeyboardInterrupt异常的方法实现,感兴趣的可以了解一下
    2024-08-08
  • Python如何读写CSV文件

    Python如何读写CSV文件

    这篇文章主要介绍了Python如何读写CSV文件,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • python能否java成为主流语言吗

    python能否java成为主流语言吗

    在本篇文章里小编给大家分享的是一篇关于python能否java成为主流语言的相关知识点,有兴趣的朋友们参考下。
    2020-06-06
  • Python中方法定义与方法调用举例详解

    Python中方法定义与方法调用举例详解

    在Python中,方法调用是编写程序时经常会涉及到的一个重要概念,下面这篇文章主要给大家介绍了关于Python中方法定义与方法调用的相关资料,文章通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • tensorflow的ckpt及pb模型持久化方式及转化详解

    tensorflow的ckpt及pb模型持久化方式及转化详解

    今天小编就为大家分享一篇tensorflow的ckpt及pb模型持久化方式及转化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Pygame改编飞机大战制作兔子接月饼游戏

    Pygame改编飞机大战制作兔子接月饼游戏

    一年中秋又快到了,今年加入了Python的学习行列,得益于Python的开发效率和易读性,网上写文章的次数多了起来,既然是中秋节那肯定要搞个应景的游戏才行
    2022-09-09

最新评论