python 流量控制,
大家好,本文主要说一下Python的简单限流器的介绍。有兴趣的同学过来看看,如果对你有帮助记得收藏。
简单的结论是:动态释放保证了固定数量的信号量随时可用。
我们通常使用这样的信号量。
xueei _ semaphore=threading . semaphore(4)#申请信号量
#在某处使用信号量
韦雪_信号获取()
//在这里做点什么
.
韦雪_semaphore.release()
限流的过程,其实就是不断使用这个受限信号量的过程。
因为设置了4信号配额,所以最多允许4个线程同时运行。
任何时候只要得到4以上,其他线程就只能等待,和排队等待很像。安检人员看到排队的人太多,就把后面的人拦下来,直到候车的人减少了,再让一部分人进入车站的候车区。
直接上代码吧,后面再解释。
#!/usr/bin/env python
# -*-编码: utf-8 -*-
# @Time : 2021/11/27下午10:43
# @作者:雷雪薇
# @ CSDN/金爵/微信:雷韦雪
# @XueWeiTag: CodingDemo
# @ File : threading _ seme phore . py
# @项目:你好
导入线程
导入时间
导入队列
韦雪信号=线程。旗语(4)
打印(韦雪信号: ,韦雪信号)
waiting _ for _ train={ value : 0 }
定义运行():
new _ joiner=threading . current _ thread()。名字
# print( %s ready %new_joiner)
韦雪_信号获取()
打印( %s go % new_joiner)
等待火车[值]=1
时间.睡眠(1)
print( %s已完成 % threading.current_thread()。姓名)
韦雪_semaphore.release()
等待火车[值] -=1
定义日志_等待_区域_状态():
而True:
时间.睡眠(0.5)
name=threading.current_thread()。名字
print(name %s - size %s % (name,waiting_for_train[value]))
q_watcher=线程。线程(name=等待区域,target=log _ the _ waiting _ area _ status)
q_watcher.start()
线程=[]
对于范围(100):内的I
t_name=t- str(i)
t=螺纹。线程(名称=t_name,目标=run)
threads.append
启动()
对于线程:中的测试
t.join()
这里我们申请了4个信号量的空槽。
然后启动100个线程,不断获取信号量,完成后再释放。
同时,我们有一个缓冲队列,只存储新进站.的当前人数
通过打印这个waiting_for_train的状态,我们可以看到任何时候都只有4个人在排队。
不超过四个。
运行效果
在运行过程中,我们发现队列的大小总是4。
最后,进站的人都上车了,候车的人也清场了。
这里总共有102个线程,一个主线程,一个等待区状态显示线程,另外还有一百个线程,代表100个入站人员。
Semaphore初始化四个度量,所以每次可以停下来等待的人最多只有四个。
就像地铁站一样。
我们也可以尝试把入站处理的代码修改成下面的代码,读者可以自己运行看看效果。
韦雪_信号获取()
打印( %s go % new_joiner)
等待火车[值]=1
时间.睡眠(1)
等待火车[值] -=1
print( %s已完成 % threading.current_thread()。姓名)
韦雪_semaphore.release()
总结
好了,这个限流器很简单,匹配在这个中间编程里简单介绍一下。
读者可以复制代码,运行几次,思考一下。
关于Python的简单限流器介绍的这篇文章就到这里了。关于Python限流器的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。