多线程之queue

Posted zoling7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程之queue相关的知识,希望对你有一定的参考价值。

一、线程queue


1,定义:

queue队列 :使用 import queue,用法与进程 Queue一样。

queue is especially useful in threaded programming when information must be exchanged safely between multiple threads.

2,class queue.Queue(maxsize=0)  队列功能:先进先出

import queue

q = queue.Queue(3)       # 先进先出--> 队列,指定队列大小,最大三个值

q.put("first")     # 放值,放任何类型的值都OK
q.put(2)
q.put("second")
# q.put(4)           # 放多了,阻塞住,卡那了
# q.put(4,block=True)       # block 这个参数默认是阻塞的(队列满了就阻塞了)
# q.put(4,block=False)        # 不阻塞,但是会抛异常,告诉你队列满了  相当于 q.put_nowait(4)
# q.put(4,block=True,timeout=3)       # 队列满的情况下阻塞,阻塞 3秒


print(q.get())      # 队列先进先出,取第一个进去的,这里是 "first"
print(q.get())
print(q.get())
# print(q.get())      # 值取没了,队列变空,再取值,阻塞住,卡那了,与put用法一样

print(q.get(block=True,timeout=3))
# q.get(block=False) 就相当于 q.get_nowait()

3,class queue.LifoQueue(maxsize=0)  堆栈功能:last in first out(后进先出)

# 堆栈功能:后进先出
import queue

q = queue.LifoQueue(3)      # 后进先出---> 堆栈,与队列用法差不多

q.put("first")              # 放值,放任何类型的值都OK
q.put(2)
q.put("second")

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

"""
second
2
first
"""

4,class queue.PriorityQueue(maxsize=0)  优先级队列:存储数据时可设置优先级的队列

# 优先级队列
import queue

# 优先级队列,你可以向队列中放一个数据,还要给这个数据放个优先级,优先级越高越先被拿出来。
q = queue.PriorityQueue(3)

q.put((10,"first"))     # 数组形式,第一个放优先级,第二个放数据,数字越小优先级越高
q.put((40,"second"))
q.put((30,"third"))

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

"""
(10, ‘first‘)
(30, ‘third‘)
(40, ‘second‘)
"""

 

 

 

 

 

 

以上是关于多线程之queue的主要内容,如果未能解决你的问题,请参考以下文章

python 多线程之Queue

多线程中的应用之队列(queue)

Java多线程总结之线程安全队列Queue

关于多线程之GCD的一些学习要点

爬虫之多线程案例

Python之queue模块