当前位置: 首页 > 图灵资讯 > 行业资讯> python线程中的semaphore信号量是什么

python线程中的semaphore信号量是什么

发布时间:2025-10-26 16:07:26

semaphore信号量在python中的线程

semaphore是一种内置计数器,每当调用acquire()时,内置计数器-1;内置计数器+1,每次调用release()。

当计数器为0时,计数器不能小于0,acquire()将阻塞线程调用release()直到其他线程。

看下面的代码:

importtime
importthreading
deffoo():
time.sleep(2)#程序休息2秒
print("ok",time.ctime())
foriinrange(20):
t1=threading.Thread(target=foo,args=()#实例化一个线程
t1.start()#启动线程

执行结果:

TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017
TueJul182:05:582017

可以看出,程序会在很短的时间内生成20个线程来打印一个句子。

如果在主机执行IO密集型任务时执行此类程序,计算机很可能会停机。

此时,可以在一个时间点内添加一个计数器功能来限制线程的数量。

相关推荐:Python视频教程

代码如下:

importtime
importthreading
s1=threading.Semaphore(5)#添加计数器
deffoo():
s1.acquire()#计数器获得锁
time.sleep(2)#程序休眠2秒
print("ok",time.ctime())
s1.release()#计数器释放锁
foriinrange(20):
t1=threading.Thread(target=foo,args=()#创建线程
t1.start()#启动线程

执行结果:

TueJue1820:04:382017
TueJue1820:04:382017
TueJue1820:04:382017
TueJue1820:04:382017
TueJue1820:04:382017
TueJue1820:04:402017
TueJue1820:04:402017
TueJue1820:04:402017
TueJue1820:04:402017
TueJue1820:04:402017
TueJue1820:04:422017
TueJue1820:04:422017
TueJue1820:04:422017
TueJue1820:04:422017
TueJue1820:04:422017
TueJue1820:04:442017
TueJue1820:04:442017
TueJue1820:04:442017
TueJue1820:04:442017
TueJue1820:04:442017

相关文章

python线程中的semaphore信号量是什么

python线程中的semaphore信号量是什么

2025-10-26
Python reversed函数及用法

Python reversed函数及用法

2025-10-26
Python截取字符串(字符串切片)方法详解

Python截取字符串(字符串切片)方法详解

2025-10-26
Python3 迭代器与生成器

Python3 迭代器与生成器

2025-10-24
Python整数常用的方法汇总

Python整数常用的方法汇总

2025-10-24
Python3 File(文件) 方法

Python3 File(文件) 方法

2025-10-24