Python queue队列
一、队列在多线程的程序必须安全的在多个线程之间交互的时候是非常有用的。
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((5,[1,2,3])) #设置优先级为5 17 q.put((1,Foo(1))) #设置优先级为1 18 q.put((6,1)) #设置优先级为6 19 20 21 data1 = q.get_nowait() #获取第一次放入的数据 22 data2 = q.get_nowait() #获取第二次放入的数据 23 data3 = q.get_nowait() #获取第三次放入的数据 24 25 26 print(data1) 27 print(data2) 28 print(data3)
执行结果:
1 C:\Users\wohaoshuai\AppData\Local\Programs\Python\Python36\python.exe E:/PythonLearn/day16/queue_learn.py 2 (1, <__main__.Foo object at 0x000001A0B8792710>) 3 (5, [1, 2, 3]) 4 (6, 1) 5 6 Process finished with exit code 0