Python怎么实现简易的限流器
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,今天小编给大家分享一下Python怎么实现简易的限流器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一
千家信息网最后更新 2025年11月09日Python怎么实现简易的限流器
今天小编给大家分享一下Python怎么实现简易的限流器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
简单总结就是:动态的release,保证任意时刻都有固定数量可用的信号量。
我们通常会这样使用信号量
xuewei_semaphore = threading.Semaphore(4) #申请信号量#在某个地方使用信号量xuewei_semaphore.acquire()//do something here....xuewei_semaphore.release()
限流的过程其实就是不断的使用这个有限信号量的过程。
因为设置了4信号额度,最多允许4个线程同时运行。
任意时间只要获取超过4个后,其他线程只能等待,这就跟我们进站排队很像。安检人员看到进入排队的人太多的,把后面的拦住,知道等候的人数减少,再放行一些人员进入车站等候区。
直接上代码吧,后面再解释。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/11/27 10:43 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷学委# @XueWeiTag: CodingDemo# @File : threading_semephore.py# @Project : helloimport threadingimport timeimport queuexuewei_semaphore = threading.Semaphore(4)print("xuewei_semaphore:", xuewei_semaphore)waiting_for_train = {"value": 0}def run(): new_joiner = threading.current_thread().name # print(" %s ready" %new_joiner ) xuewei_semaphore.acquire() print(" %s go" % new_joiner) waiting_for_train['value'] += 1 time.sleep(1) print(" %s completed" % threading.current_thread().name) xuewei_semaphore.release() waiting_for_train['value'] -= 1def log_the_waiting_area_status(): while True: time.sleep(0.5) name = threading.current_thread().name print("name %s - size %s " % (name, waiting_for_train['value']))q_watcher = threading.Thread(name="waiting area", target=log_the_waiting_area_status)q_watcher.start()threads = []for i in range(100): t_name = "t-" + str(i) t = threading.Thread(name=t_name, target=run) threads.append(t) t.start()for t in threads: t.join()这里我们申请了信号量4个空槽。
然后启动100个线程,不停的去获取信号量,然后做完就释放。
同时我们有一个缓冲队列,只存放当前新进站的人数。
通过打印这个waiting_for_train的状态,我们可以看到任意时刻队列最多只有4人进入。
也不会超过4个。
运行效果
在运行过程,我们发现queue的大小一直为4.
最后所有进站人员都进站上车了,等候的人就清零了。
这里总共有102个线程,一个主线程,一个等候区状态展示线程,还有另外一个百个线程,代表了100个进站人员。
semaphore初始化了4个度量,所以每次最多可以进站等候的人数最多只有4个。
跟地铁拦截进站一样。
我们也可以尝试把进站处理的代码修改为下方代码,读者自行运行看一下效果。
xuewei_semaphore.acquire()print(" %s go" % new_joiner)waiting_for_train['value'] += 1time.sleep(1)waiting_for_train['value'] -= 1print(" %s completed" % threading.current_thread().name)xuewei_semaphore.release()以上就是"Python怎么实现简易的限流器"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
信号
线程
信号量
人员
知识
篇文章
运行
人数
代码
就是
过程
简易
限流器
内容
只有
同时
效果
时刻
状态
队列
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
excel数据库是主要功能吗
新世界服务器能容纳多少人
市场对网络安全员的需求
梦幻西游雪山服务器的特点
数据中心网络安全培训心得体会
北京大数据软件开发要多少钱
乔木网络技术公司
无线数据终端无服务器
多久对网络安全进行评估
普元eos 数据库配置
软件开发定制培训好吗
青海惠普服务器维修哪家好
网络安全法律知识竞赛答题入口
零售企业网络技术
数据库老是被攻击
酒店管理软件开发
河南工信网络技术有限公司
什么是nr数据库
软件开发干不下去了干什么
scum大更新删档服务器删吗
项链数据库
砀山软件开发商在线咨询
网络安全相关刊物论文
青岛鼎盛网络技术有限公司
酒店管理系统服务器构架
网络安全半包
163收信服务器地址怎么填
荔湾区举办网络安全周
山西二五六互联网科技公司
服务器的痕迹信息有哪些