day48-线程-信号量
2024-10-08 18:17:01
#1、信号量,用来保证多个线程不会互相冲突。 #2、迷你唱吧:每次只能有两人在里面唱k:
from threading import Thread
from threading import Semaphore
import time
import random
def sing(i,sem):
sem.acquire()
print('%s拿到钥匙进入房间唱K'%i)
time.sleep(random.randint(3,6)) #睡眠是为了看效果
print('%s从房间出来了'%i)
sem.release() sem = Semaphore(2) #有两把钥匙,受到钥匙的限制,5个线程不能同时执行,同一时间只能有2个线程在执行,其他在等着。
for i in range(5): #5人唱k,5个任务,开启5个线程。
t = Thread(target=sing,args=(i,sem))
t.start()
# 0拿到钥匙进入房间唱K
# 1拿到钥匙进入房间唱K
# 1从房间出来了
# 2拿到钥匙进入房间唱K
# 0从房间出来了
# 3拿到钥匙进入房间唱K
# 3从房间出来了
# 4拿到钥匙进入房间唱K
# 2从房间出来了
# 4从房间出来了 #3、信号量和线程池的区别:
# 1.信号量:有几个任务就开几个线程,因为受到锁的限制,线程(任务)不能同时执行。
# 例如有两把锁执行5个线程(任务),每次只能有两个线程(任务)在执行,其他在等待。
# 线程池:可以设置线程的数量去轮流执行它的任务:例如设置2个线程去轮流执行5个任务。
# 每次只能有两个任务在执行,其他在等待。
最新文章
- 【MSSQL】MSSQL还原单mdf文件报1813错误
- serialize()序列化
- Zend Studio实用快捷键一览表
- java-资源管理器try-with-resource
- appium for windows 环境搭建
- mvc简单execl导出
- 【Spark学习】Apache Spark调优
- web前端安全相关
- [HDU] 2063 过山车(二分图最大匹配)
- Genymotion如何访问本地服务器?
- keytool 错误:java.to.FileNotFoundException:
- visual studio 2015使用python tools远程调试maya 2016
- Executor框架简介
- BZOJ 4644
- Timeout occurred while waiting for latch: class 'ACCESS_METHODS_DATASET_PARENT'
- FreeMaker使用HashMap
- indexOf includes 区别
- stock 基本操作
- day06 元组类型
- bootstrap4.1下拉菜单