python令牌桶算法

import time


class TokenBucket(object):

    # rate是令牌发放速度,capacity是桶的大小
    def __init__(self, rate, capacity):
        self._rate = rate
        self._capacity = capacity
        self._current_amount = 0
        self._last_consume_time = int(time.time())

    # token_amount是发送数据需要的令牌数
    def consume(self, token_amount):
        increment = (int(time.time()) - self._last_consume_time) * self._rate  # 计算从上次发送到这次发送,新发放的令牌数量
        self._current_amount = min(
            increment + self._current_amount, self._capacity)  # 令牌数量不能超过桶的容量
        if token_amount > self._current_amount:  # 如果没有足够的令牌,则不能发送数据
            return False
        self._last_consume_time = int(time.time())
        self._current_amount -= token_amount
        return True

作者:simpleapples
链接:https://juejin.im/post/5ab10045518825557005db65
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

posted @ 2018-11-08 22:51  公众号python学习开发  阅读(1423)  评论(0编辑  收藏  举报