import timeclass 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
令牌桶演算法
令牌桶演算法是網路流量整形和速率限制中最常用的一種演算法。用來控制傳送到網路上的資料的數目,並允許突發資料的傳送。大小固定的令牌桶可自行以恆定的速率源源不斷地產生令牌。如果令牌不被消耗,或者被消耗的速度小於產生的速度,令牌就會不斷地增多,直到把桶填滿。後面再產生的令牌就會從桶中溢位。最後桶中可以儲存...
qos 令牌桶演算法
令牌桶演算法一般指的是單 雙速三色標記法。該演算法要預先在系統中設定三個引數,三個引數如下 cir用於表示每秒ip包的位元組數。cbs和ebs以位元組為單位。必須被設定。推薦值 它們之一必須大於0,且若大於0的cbs和ebs,值要大於mtu。顏色有三種 綠 黃 紅。簡單來說,顏色與引數的對應關係是這...
漏桶演算法與令牌桶演算法
漏桶演算法 leaky bucket 是網路世界中流量整形 traffic shaping 或速率限制 rate limiting 時經常使用的一種演算法,它的主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供乙個穩定的流量。...