进程_线程 之(四) --- 信号量和队列

信号量

信号量:

  信号量就对线程最大并发数做限制,

  如果当前线程开启的个数超过了线程最大并发量,

  超出的线程要暂停执行,直到有线程执行完成,才加入新的线程

代码

 1 import threading
 2 from time import sleep
 3 
 4 # 定义一个信号量(线程的最大并发量)
 5 sem = threading.Semaphore(2) # 允许2个线程并发执行
 6 
 7 def func():
 8     with sem:  # 设置并发量。防止并发访问亮过载,影响服务器
 9         print("当前线程%s正在执行..."%threading.current_thread().name)
10         sleep(2)
11         print("当前线程%s执行结束"%threading.current_thread().name)
12 
13 if __name__ == '__main__':
14     for _ in range(5):     # 开启五个线程
15         t = threading.Thread(target=func)
16         t.start()

结果

 1 结果:
 2 """
 3   当前线程Thread-1正在执行...
 4   当前线程Thread-2正在执行...
 5   当前线程Thread-1执行结束
 6   当前线程Thread-2执行结束
 7   当前线程Thread-3正在执行...
 8   当前线程Thread-4正在执行...
 9   当前线程Thread-3执行结束
10   当前线程Thread-4执行结束
11   当前线程Thread-5正在执行...
12   当前线程Thread-5执行结束
13 """

 队列

  • 介绍

  线性结构:栈 和 队列  

    栈:先进后出, 

    队列:先进先出,

  哈希结构:字典,散列结构

  • 代码
 1 from queue import Queue
 2 
 3 # 创建一个队列。参数代表对列的长度,如果不传默认对列可以无限长
 4 q = Queue(6)
 5 
 6 # 向队列中添加内容
 7 q.put("马云")
 8 q.put("马化腾")
 9 q.put("马赛克")
10 q.put("李嘉诚")
11 q.put("老王")
12 q.put("大头儿子")
13 
14 print(q.full())  # 队列是否已满
15 print(q.empty()) # 队列是否为空
16 print(q.qsize()) # 队列的数据量
17 
18 q.put("小头爸爸") # 如果队列已满,程序就会暂停等待
19 
20 # 向队列取出数据
21 print(q.get())
22 print(q.get())
23 print(q.get())
24 print(q.get())
25 print(q.get())
26 print(q.get())
27 
28 print(q.get()) # 如果队列已空,再出队就进入等待状态

 

转载于:https://www.cnblogs.com/TMMM/p/11379286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值