'''内置模块queue'''
import queue
#一. 队列的初始化
#先进先出队列初始化 FIFO
# 初始化默认无限大,maxsize参数可以指定大小
#q=queue.Queue()
# #先进后出队列初始化 LIFO
# q=queue.LifoQueue()
# #优先级队列初始化
# '''
# 比较队列中每个数据的大小,值最小的数据拥有出队列的优先权。
# 数据一般以元组的形式插入,典型形式为(priority_number, data)。
# 如果队列中的数据没有可比性,那么数据将被包装在一个类中,
# 忽略数据值,仅仅比较优先级数字。
# '''
# q=queue.PriorityQueue()
# #简单队列初始化
# q=queue.SimpleQueue()
#二.队列常用方法
#1.put(self, item, block=True, timeout=None)->入队
#item:值可以是任何类型
#block:默认True,队列满了后继续添加程序阻塞;Fale 队列满了后报异常
#timeout:进队列的时间,超时后报异常,默认不限超时
def demo1():
'''队列未满添加程序不阻塞,会执行打印'''
q=queue.Queue(5)
for _ in range(5):
q.put([1,2,3])
print("主进程退出")
def demo1():
'''队列未满添加程序阻塞等待队列扩容,不会执行打印'''
q=queue.Queue(5)
for _ in range(6):
q.put([1,2,3])
print("主进程退出")
def demo1():
'''队列满添加,
程序阻塞等待队列扩容,
超时报异常
不会执行打印'''
q=queue.Queue(5)
for _ in range(6):
q.put([1,2,3],timeout=0.01)
print("主进程退出")
def demo1():
'''队列满添加
程序阻塞等待队列扩容,
block=False报异常
不会执行打印'''
q=queue.Queue(5)
for _ in range(6):
q.put([1,2,3],block=False)
print("主进程退出")
#2.get(self, block=True, timeout=None)->出队
#block:默认True,队列满了后继续添加程序阻塞;Fale 队列满了后报异常
#timeout:进队列的时间,超时后报异常,默认不限超时
def demo1():
'''队列取值为空
程序阻塞等待队列添加值,
不会执行打印
'''
q=queue.Queue(5)
q.get()
print("主进程退出")
def demo1():
'''队列取值为空
block=False,报异常
不会执行打印
'''
q=queue.Queue(5)
q.get(block=False)
print("主进程退出")
def demo1():
'''队列取值为空
timeout超时,报异常
不会执行打印
'''
q=queue.Queue(5)
q.get(timeout=0.01)
print("主进程退出")
#3.qsize() 队列大小
def demo1():
'''分别打印5和4'''
q=queue.Queue(5)
for _ in range(4):
q.put([1,2,3])
print(q.maxsize)
print(q.qsize())
#3.empty() 是否为空
#4.Queue.full() 是否为空
def demo1():
'''打印True'''
q=queue.Queue(5)
for _ in range(5):
q.put([1,2,3])
print(q.full())
#4.task_done() 队列的一个操作任务完成
#5.join() 阻塞直到unfinished_tasks为0
'''
queue中每次操作put ,unfinished_tasks就加1
每条用一次task_done() unfinished_tasks就减1
join() 让unfinished_tasks停止阻塞
'''
def demo1():
'''
阻塞不打印
'''
q = queue.Queue(5)
for _ in range(5):
q.put([1, 2, 3])
for _ in range(5):
print(q.get())
q.join()
print("执行完毕")
def demo1():
'''
不阻塞,打印
'''
q = queue.Queue(5)
for _ in range(5):
q.put([1, 2, 3])
print(q.unfinished_tasks)
for _ in range(5):
print(q.get())
q.task_done()
q.join()
print("执行完毕")
python内置队列
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 约瑟夫算法 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Jose...
- 上一篇文章为:→5.1.0栈 队列的实现 同栈一样,队列也可以用顺序表或者链表实现。 操作 Queue() 创建一...
- 队列的数据结构模型: 队列是一种有次序的数据项集合, 在队列中, 数据项的添加总发生在一端(通常称为“尾端”rea...