From f5c6c378687b0a20e162b7a4c1faa688a531d086 Mon Sep 17 00:00:00 2001 From: bel Date: Sun, 18 Sep 2022 19:42:58 -0600 Subject: [PATCH] todo --- src/bucket.py | 15 +++++++++++++-- src/reader.py | 18 +++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/bucket.py b/src/bucket.py index c6ebb2f..daf0b8b 100644 --- a/src/bucket.py +++ b/src/bucket.py @@ -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(): diff --git a/src/reader.py b/src/reader.py index 77cc5d1..48b6155 100644 --- a/src/reader.py +++ b/src/reader.py @@ -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()):