0
点赞
收藏
分享

微信扫一扫

Python的线程12 简易限流器

迪莉娅1979 2022-01-25 阅读 67

前篇学委展示了Semaphore信号量,这个工具可以让开发者设置阀值,简单的控制并发的数量。

不知道读者还记得前篇设置信号量为1的时候,三个运动员只有一个先跑了。

因为一开始给了信号量为1,所以学委还没有喊完3/2/1,就有人抢跑了。

好,拉回主题 - 限流器

什么是限流器?

大家记不记得经常坐地铁(早晚)高峰期的时候,在入口的地方就有工作人员搬了一下遮挡栏,

每次就放而二三十人进入。一般4个地铁口,两个入。两个出,出口一般没有限流,除了那种对接客运站的出口,会有限流。

限流器,就是类似的概念,程序实现这样的一个遮挡栏,实现这样的定期的放入定额数量的人员执行任务。

翻译成技术话语,那就是,一个管理机制,保证了任意时间只有最大限额数量的线程,同时做事情。

这就是限流器。

怎么做限流器呢?

本篇说了信号量,那么我们就用它来做吧。

信号量保证了限定数额的线程,但是它是一次性的啊。

比如下面的缺陷:

threading.Semaphore(3) #运行3个线程同时acquire不阻塞,如果有4个线程acquire将有一个线程等待。

恰好,它还给我们提供了release函数。

所以我们只要知道限额生成信号量初始值,然后在程序中不断release,这样信号量就恢复。

等候的其他线程又能获得锁,执行自己的任务了。

问题不就迎刃而解了吗?

总结

先卖个关子。下篇学委会展示怎么做的代码。

编程还是挺好玩的。 喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏

举报

相关推荐

0 条评论