Julia token bucket rate limiter struct
Julia
mutable struct TokenBucket
capacity::Float64
rate::Float64
tokens::Float64
stamp::Float64
end
TokenBucket(capacity, rate) = TokenBucket(capacity, rate, capacity, time())
function take!(b::TokenBucket, n=1.0)
now = time()
b.tokens = min(b.capacity, b.tokens + (now - b.stamp) * b.rate)
b.stamp = now
b.tokens >= n || return false
b.tokens -= n
return true
end
bucket = TokenBucket(3, 1.0)
println([take!(bucket) for _ in 1:5])