MCPcopy Create free account
hub / github.com/pyload/pyload / Bucket

Class Bucket

module/network/Bucket.py:23–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21from threading import Lock
22
23class Bucket:
24 def __init__(self):
25 self.rate = 0
26 self.tokens = 0
27 self.timestamp = time()
28 self.lock = Lock()
29
30 def __nonzero__(self):
31 return False if self.rate < 10240 else True
32
33 def setRate(self, rate):
34 self.lock.acquire()
35 self.rate = int(rate)
36 self.lock.release()
37
38 def consumed(self, amount):
39 """ return time the process have to sleep, after consumed specified amount """
40 if self.rate < 10240: return 0 #min. 10kb, may become unresponsive otherwise
41 self.lock.acquire()
42
43 self.calc_tokens()
44 self.tokens -= amount
45
46 if self.tokens < 0:
47 time = -self.tokens/float(self.rate)
48 else:
49 time = 0
50
51
52 self.lock.release()
53 return time
54
55 def calc_tokens(self):
56 if self.tokens < self.rate:
57 now = time()
58 delta = self.rate * (now - self.timestamp)
59 self.tokens = min(self.rate, self.tokens + delta)
60 self.timestamp = now
61

Callers 2

__init__Method · 0.90
HTTPDownload.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected