今天介绍用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()
多线程介绍的差很少了,等我再有了新的研究,再补更。
谢谢你们的阅读。