Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- class QueryScheduler:
- NORMAL = 'normal'
- LIVE = 'live'
- def __init__(self, queries_normal, queries_live):
- self.mode = self.NORMAL
- self.queries_normal = queries_normal
- self.queries_live = queries_live
- self.waiting = self._in_waiting()
- def __iter__(self):
- return self
- def __next__(self):
- time.sleep(0.1)
- current_queries = [query for (query, freq, after) in self.waiting if time.time() > after]
- self.waiting = [
- (
- query,
- freq,
- time.time() + freq if time.time() > after else after,
- )
- for query, freq, after in self.waiting
- ]
- return current_queries
- def _in_waiting(self):
- if self.mode == self.NORMAL:
- queries = self.queries_normal
- elif self.mode == self.LIVE:
- queries = self.queries_live
- return [(query, freq, time.time() + freq) for query, freq in queries]
- def switch(self, mode):
- if self.mode == mode:
- return
- self.mode = mode
- self.waiting = self._in_waiting()
- qs = QueryScheduler(
- [
- ('A', 10),
- ('B', 10),
- ('C', 10),
- ('D', 10),
- ],
- [
- ('A', 1),
- ('B', 5),
- ('C', 10),
- ('D', 15),
- ]
- )
- qs.switch(QueryScheduler.NORMAL)
- for q in qs:
- if not q:
- continue
- print(q)
- # mode switch to LIVE
- if qs.mode == QueryScheduler.NORMAL:
- qs.switch(QueryScheduler.LIVE)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement