aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Numerlor <[email protected]>2020-12-11 23:41:38 +0100
committerGravatar Numerlor <[email protected]>2020-12-15 05:02:10 +0100
commitfdff2491fc48bac0c55e0a506e7f7c395be13c0d (patch)
tree44738d4ddbe691906c6ffe9896da14eaf870dae3
parentUse global bot http_session instead of parameter (diff)
Remove internal CachedParser result cache
We no longer need to keep the items around since everything is in redis and the costs of always going through redis is fairly small
-rw-r--r--bot/exts/info/doc/_cog.py20
1 files changed, 8 insertions, 12 deletions
diff --git a/bot/exts/info/doc/_cog.py b/bot/exts/info/doc/_cog.py
index e1be956cd..d2bbf8c57 100644
--- a/bot/exts/info/doc/_cog.py
+++ b/bot/exts/info/doc/_cog.py
@@ -80,9 +80,8 @@ class CachedParser:
def __init__(self):
self._queue: List[QueueItem] = []
- self._results = {}
self._page_symbols: Dict[str, List[DocItem]] = defaultdict(list)
- self._item_events: Dict[DocItem, asyncio.Event] = {}
+ self._item_futures: Dict[DocItem, asyncio.Future] = {}
self._parse_task = None
async def get_markdown(self, doc_item: DocItem) -> str:
@@ -107,9 +106,8 @@ class CachedParser:
self._parse_task = asyncio.create_task(self._parse_queue())
self._move_to_front(doc_item)
- self._item_events[doc_item] = item_event = asyncio.Event()
- await item_event.wait()
- return self._results[doc_item]
+ self._item_futures[doc_item] = item_future = asyncio.Future()
+ return await item_future
async def _parse_queue(self) -> None:
"""
@@ -123,12 +121,11 @@ class CachedParser:
try:
markdown = get_symbol_markdown(soup, item)
await doc_cache.set(item, markdown)
- self._results[item] = markdown
except Exception:
log.exception(f"Unexpected error when handling {item}")
else:
- if (event := self._item_events.get(item)) is not None:
- event.set()
+ if (future := self._item_futures.get(item)) is not None:
+ future.set_result(markdown)
await asyncio.sleep(0.1)
self._parse_task = None
@@ -153,15 +150,14 @@ class CachedParser:
All currently requested items are waited to be parsed before clearing.
"""
- for event in self._item_events.values():
- await event.wait()
+ for future in self._item_futures.values():
+ await future
if self._parse_task is not None:
self._parse_task.cancel()
self._parse_task = None
self._queue.clear()
- self._results.clear()
self._page_symbols.clear()
- self._item_events.clear()
+ self._item_futures.clear()
class DocCog(commands.Cog):