From 084ca956fb583008ee5c5ba0eca8273074cebbce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 20 Oct 2014 16:49:53 +0200 Subject: [PATCH] Cache metadata in an LRU cache instead of fetching it from disk everytime --- requirements.txt | 1 + src/octoprint/filemanager/storage.py | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 121234d5..ec212ee2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,4 @@ netaddr watchdog sarge netifaces +pylru diff --git a/src/octoprint/filemanager/storage.py b/src/octoprint/filemanager/storage.py index 98849d1c..ee796e52 100644 --- a/src/octoprint/filemanager/storage.py +++ b/src/octoprint/filemanager/storage.py @@ -8,6 +8,7 @@ __copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms import logging import os +import pylru import octoprint.filemanager @@ -89,6 +90,8 @@ class LocalFileStorage(StorageInterface): import threading self._metadata_lock = threading.Lock() + self._metadata_cache = pylru.lrucache(10) + @property def analysis_backlog(self): for entry in self._analysis_backlog_generator(): @@ -764,6 +767,9 @@ class LocalFileStorage(StorageInterface): return path def _get_metadata(self, path): + if path in self._metadata_cache: + return self._metadata_cache[path] + metadata_path = os.path.join(path, ".metadata.yaml") if os.path.exists(metadata_path): with self._metadata_lock: @@ -784,4 +790,6 @@ class LocalFileStorage(StorageInterface): import yaml yaml.safe_dump(metadata, stream=f, default_flow_style=False, indent=" ", allow_unicode=True) except: - self._logger.exception("Error while writing .metadata.yaml to {path}".format(**locals())) \ No newline at end of file + self._logger.exception("Error while writing .metadata.yaml to {path}".format(**locals())) + else: + self._metadata_cache[path] = metadata