Python的线程12 简易限流器

正式的Python专栏第49篇,同学站住,别错过这个从0开始的文章!

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

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

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

好,拉回主题 - 限流器

什么是限流器?

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

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

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

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

这就是限流器。

另外,我们接触的软件,其实都是生活的映射。

怎么做限流器呢?

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

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

比如下面的缺陷:

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

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

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

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

问题不就迎刃而解了吗?

总结

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

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

持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注微信,点赞支持收藏!

猜你喜欢

转载自blog.csdn.net/geeklevin/article/details/122677633