1. 程式人生 > >Python queue佇列

Python queue佇列

一、佇列在多執行緒的程式必須安全的在多個執行緒之間互動的時候是非常有用的。

  1、 先入先出

1 class queue.Queue(maxsize = 0)
 1 #!/usr/bin/python
 2 # -*- coding : utf-8 -*-
 3 # 作者: Presley
 4 # 時間: 2018-12-1
 5 # 郵箱:[email protected]
 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 # 郵箱:[email protected]
 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 # 郵箱:[email protected]
 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、先進先出