master
bel 2022-09-18 19:42:58 -06:00
parent 7f8c87c7bc
commit f5c6c37868
2 changed files with 18 additions and 15 deletions

View File

@ -10,14 +10,25 @@ class Bucket:
def push(self, v): def push(self, v):
if 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): def pick_n(self, n):
if not self.content: if not self.content:
return [] return []
content = [() for i in content] # TODO log2
result = [] result = []
for i in range(0, n): 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)) return list(set(result))
def now_ms(): def now_ms():

View File

@ -1,4 +1,5 @@
import threading import threading
import math
import queue import queue
import time import time
import sys import sys
@ -76,26 +77,17 @@ class RandomReader:
class RandomPool: class RandomPool:
def __init__(self, values): 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.total = sum(self.values.values())
self.consumed = set() self.consumed = set()
log.info("RandomPool with", {k:int(100.0*v/self.total) for k,v in self.values.items()})
def reset(self): def reset(self):
self.consumed = set() self.consumed = set()
def pop(self): 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 = random.randint(0, self.total-1)
idx_offset = 0 idx_offset = 0
for k in sorted(self.values.keys()): for k in sorted(self.values.keys()):