码迷,mamicode.com
首页 > 编程语言 > 详细

Python queue队列

时间:2018-12-01 20:27:06      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:优先   最大   生产   obj   生成   usr   users   span   __init__   

一、队列在多线程的程序必须安全的在多个线程之间交互的时候是非常有用的。

  1、 先入先出

1 class queue.Queue(maxsize = 0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:1209989516@qq.com
 6 # 这是我用来练习python 队列的测试脚本
 7 
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12 
13 
14 q = queue.Queue(maxsize=3) #生成一个保存最大值为3的队列实例
15 
16 q.put([1,2,3])
17 q.put(Foo(1))
18 q.put(1)
19 #q.put(2) 因为实例化的时候规定了只能最多放三分数据因此这个put不会成功
20 
21 print(q.full())#判断队列是否满了
22 
23 data1 = q.get_nowait() #获取第一次放入的数据
24 data2 = q.get_nowait() #获取第二次放入的数据
25 data3 = q.get_nowait() #获取第三次放入的数据
26 
27 print(q.full())#判断队列是否满了
28 
29 print(data1,type(data1))
30 print(data2,type(data2))

执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 True
3 False
4 [1, 2, 3] <class list>
5 <__main__.Foo object at 0x0000025C45E52748> <class __main__.Foo>
6 
7 Process finished with exit code 0

  2、先入后出

1 class queue.LifoQueue(maxsize=0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:1209989516@qq.com
 6 # 这是我用来练习python 队列的测试脚本
 7 
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12 
13 
14 q = queue.LifoQueue(maxsize=3) #生成一个保存最大值为3的队列实例
15 
16 q.put([1,2,3])
17 q.put(Foo(1))
18 q.put(1)
19 #q.put(2) 因为实例化的时候规定了只能最多放三分数据因此这个put不会成功
20 
21 print(q.full())#判断队列是否满了
22 
23 data1 = q.get_nowait() #获取第一次放入的数据
24 data2 = q.get_nowait() #获取第二次放入的数据
25 data3 = q.get_nowait() #获取第三次放入的数据
26 
27 
28 
29 print(q.full())#判断队列是否满了
30 
31 print(data1,type(data1))
32 print(data2,type(data2))

执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 True
3 False
4 1 <class int>
5 <__main__.Foo object at 0x0000019127012748> <class __main__.Foo>
6 
7 Process finished with exit code 0

  3、存储数据时可设置优先级的队列,优先级越大越先被获取 

1 class queue.PriorityQueue(maxsize=0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 时间: 2018-12-1
 5 # 邮箱:1209989516@qq.com
 6 # 这是我用来练习python 队列的测试脚本
 7 
 8 import queue
 9 class Foo(object):
10     def __init__(self,n):
11         self.n = n
12 
13 
14 q = queue.PriorityQueue(maxsize=3) #生成一个保存最大值为3的队列实例
15 
16 q.put(1,[1,2,3]) #设置优先级为1
17 q.put(5,Foo(1)) #设置优先级为5
18 q.put(10,1) #设置优先级为10
19 
20 
21 data1 = q.get_nowait() #获取第一次放入的数据
22 data2 = q.get_nowait() #获取第二次放入的数据
23 data3 = q.get_nowait() #获取第三次放入的数据
24 
25 
26 print(data1,type(data1))
27 print(data2,type(data2))

  执行结果:

1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py
2 1 <class int>
3 5 <class int>
4 
5 Process finished with exit code 0

二、生产者消费者模型 

  1、先进先出

Python queue队列

标签:优先   最大   生产   obj   生成   usr   users   span   __init__   

原文地址:https://www.cnblogs.com/Presley-lpc/p/10050485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!