Semaphore信号量,Event事件,线程Queue

本文介绍了线程同步的三种机制:Semaphore信号量用于限制并发访问的资源数量,Event事件允许线程等待特定事件发生,而Queue队列提供线程安全的数据交换。Semaphore通过acquire和release控制计数器,防止资源过载;Event通过isSet、wait、set和clear方法协调线程状态;Queue则在多线程中安全地存储和传递数据。
摘要由CSDN通过智能技术生成

一.信号量

     Semaphore管理一个内置的计数器,
     每当调用acquire()时内置计数器-1;
     调用release() 时内置计数器+1;
     计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。

     实例:(同时只有5个线程可以获得semaphore,即可以限制最大连接数为5)

import time
from threading import Semaphore,Thread,current_thread



def func():
    sm.acquire()
    print("%s get sm" %current_thread().name)
    time.sleep(5)
    sm.release()
    

if __name__ == '__main__':
    sm=Semaphore(5)
    for i in range(23):
        t=Thread(target=func)
        t.start()

  注意:池与信号量是两个完全不同的概念 ,进程池Pool(4),最大只能产生4个进程,而且从头到尾都只是这四个进程,不会产生新的,而信号量是产生一堆线程/进程

  二.Event事件

      同进程的一样,线程的一个关键特性是每个线程都是独立运行且状态不可预测。如果程序中的其 他线程需要通过判断某个线程的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值