todo
parent
7f8c87c7bc
commit
f5c6c37868
|
|
@ -10,14 +10,25 @@ class Bucket:
|
|||
|
||||
def push(self, v):
|
||||
if v:
|
||||
self.content.append(v)
|
||||
self._push(v)
|
||||
|
||||
def _push(self, v):
|
||||
for i in self.content:
|
||||
if i[0] == v:
|
||||
i[1] += 1
|
||||
return
|
||||
self.content.append([v, 1])
|
||||
|
||||
def pick_n(self, n):
|
||||
if not self.content:
|
||||
return []
|
||||
content = [() for i in content] # TODO log2
|
||||
result = []
|
||||
for i in range(0, n):
|
||||
result.append(self.content[random.randint(0, len(self.content)-1)])
|
||||
idx = random.randint(0, len(self.content)-1)
|
||||
result.append(
|
||||
self.content[idx][0],
|
||||
)
|
||||
return list(set(result))
|
||||
|
||||
def now_ms():
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import threading
|
||||
import math
|
||||
import queue
|
||||
import time
|
||||
import sys
|
||||
|
|
@ -76,26 +77,17 @@ class RandomReader:
|
|||
|
||||
class RandomPool:
|
||||
def __init__(self, values):
|
||||
self.values = {k:1000*v["weight"] for k,v in values.items()}
|
||||
self.values = {
|
||||
k:int(1000*v["weight"]) for k,v in values.items()
|
||||
}
|
||||
self.total = sum(self.values.values())
|
||||
self.consumed = set()
|
||||
log.info("RandomPool with", {k:int(100.0*v/self.total) for k,v in self.values.items()})
|
||||
|
||||
def reset(self):
|
||||
self.consumed = set()
|
||||
|
||||
def pop(self):
|
||||
k = self._pop()
|
||||
for i in range(0, 3-1):
|
||||
if k in self.consumed:
|
||||
k = self._pop()
|
||||
else:
|
||||
break
|
||||
self.consumed.add(k)
|
||||
if self.should_reset():
|
||||
self.reset()
|
||||
return k
|
||||
|
||||
def _pop(self):
|
||||
idx = random.randint(0, self.total-1)
|
||||
idx_offset = 0
|
||||
for k in sorted(self.values.keys()):
|
||||
|
|
|
|||
Loading…
Reference in New Issue