Python多线程学习(下)

今天介绍用Queue进行线程间的信息共享,具体就是创建一个类似队列,将数据存进去,供不同的线程之间进行利用数据。例:消费者和生产者问题,生产的产品存入队列,有消费者进行对产品消费,生产者向队列放入产品。这其中消费者(线程),生产者(线程),产品(队列)。

Queue的用法: 1. 导入模块:from queue import Queue 

 2.设置队列大小: q = Queue(maxsize)  其中maxsize是一个数字,用来设定队列大小;当maxsize=0时,队列大小不限。

3.向队列添加:  q.put()  括号内填入要填入队列的数据即可。

4.从队列中取出:  q.get()   当队列为空时,进行等待

5.获取当前队列中的个数: q.qsize()

6.判断队列是否为空: q.empty()     当队列为空时,empty()返回True;队列中还有内容时,返回False。

7. 判断队列是否满着:  q.full()     当队列满着时,返回True,否则返回False

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()

多线程介绍的差不多了,等我再有了新的研究,再补更。

谢谢大家的阅读。

猜你喜欢

转载自www.cnblogs.com/sniper-huohuohuo/p/8883539.html