Python多線程學習(下)

今天介紹用Queue進行線程間的信息共享,具體就是建立一個相似隊列,將數據存進去,供不一樣的線程之間進行利用數據。例:消費者和生產者問題,生產的產品存入隊列,有消費者進行對產品消費,生產者向隊列放入產品。這其中消費者(線程),生產者(線程),產品(隊列)。python

Queue的用法: 1. 導入模塊:from queue import Queue 多線程

 2.設置隊列大小: q = Queue(maxsize)  其中maxsize是一個數字,用來設定隊列大小;當maxsize=0時,隊列大小不限。dom

3.向隊列添加:  q.put()  括號內填入要填入隊列的數據便可。函數

4.從隊列中取出:  q.get()   當隊列爲空時,進行等待spa

5.獲取當前隊列中的個數: q.qsize()線程

6.判斷隊列是否爲空: q.empty()     當隊列爲空時,empty()返回True;隊列中還有內容時,返回False。code

7. 判斷隊列是否滿着:  q.full()     當隊列滿着時,返回True,不然返回Falseblog

Queue是先進先出FIFO(first in first out)繼承

下面是用法示例:隊列

 1 #!/usr/bin/env python3.6
 2 # -*- coding: utf-8 -*-
 3 #導入模
 4 import threading
 5 import time
 6 from atexit import register
 7 import random
 8 from queue import Queue
 9 
10 #消費者
11 def remove_1(queue,num):
12     for x in range(num):
13         try:
14             queue.get(timeout=0.5)
15             time.sleep(random.random())
16             print('當前運行線路: %s 消費一個,當前隊列剩餘個數: %s ' % (threading.current_thread().name,queue.qsize()))
17         except:
18             print('線程:%s , 沒有了,請等待!!!' % threading.current_thread().name)
19 
20 #生產者
21 def make_1(queue,num):
22     for x in range(num):
23         queue.put(x)
24         time.sleep(random.random())
25         print('正在生產線程:%s,生產一個,當前隊列個數: %s' % (threading.current_thread().name,queue.qsize()))
26 
27 #繼承Thread類
28 class New_thread(threading.Thread):
29     def __init__(self,name_1,can_1):
30         super().__init__()
31         self.name_1 = name_1
32         self.can_1 = can_1
33     def run(self):
34         self.name_1(*self.can_1)
35     pass
36 
37 #回調函數
38 @register
39 def _():
40     print('All Done!!!')
41 
42 def main():
43     q = Queue(25)
44     make_2 = New_thread(make_1,(q,15))
45     remove_2 = New_thread(remove_1,(q,20))
46     list_1 = [make_2,remove_2]
47     for x in list_1:
48         x.start()
49 
50 if __name__ == '__main__':
51     main()

多線程介紹的差很少了,等我再有了新的研究,再補更。

謝謝你們的閱讀。

相關文章
相關標籤/搜索