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):
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():

View File

@ -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()):