今天介紹用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()
多線程介紹的差很少了,等我再有了新的研究,再補更。
謝謝你們的閱讀。