From c91fe0c4fcb6ce9d7206b0fd7ab92c68695d5568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 11 May 2017 15:12:52 +0200 Subject: [PATCH] Further decouple some plugin fetch tasks from initial startup thread --- src/octoprint/plugins/announcements/__init__.py | 8 +++++++- src/octoprint/plugins/pluginmanager/__init__.py | 11 +++++++++-- src/octoprint/plugins/softwareupdate/__init__.py | 10 ++++++++-- src/octoprint/server/__init__.py | 3 ++- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/octoprint/plugins/announcements/__init__.py b/src/octoprint/plugins/announcements/__init__.py index 8919a065..74bc192a 100644 --- a/src/octoprint/plugins/announcements/__init__.py +++ b/src/octoprint/plugins/announcements/__init__.py @@ -41,7 +41,13 @@ class AnnouncementPlugin(octoprint.plugin.AssetPlugin, # StartupPlugin def on_after_startup(self): - self._fetch_all_channels() + # decouple channel fetching from server startup + def fetch_data(): + self._fetch_all_channels() + + thread = threading.Thread(target=fetch_data) + thread.daemon = True + thread.start() # SettingsPlugin diff --git a/src/octoprint/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index 145f0024..47365b2e 100644 --- a/src/octoprint/plugins/pluginmanager/__init__.py +++ b/src/octoprint/plugins/pluginmanager/__init__.py @@ -28,6 +28,7 @@ import pkg_resources import copy import dateutil.parser import time +import threading class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, octoprint.plugin.TemplatePlugin, @@ -95,8 +96,14 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, self._console_logger.setLevel(logging.DEBUG) self._console_logger.propagate = False - self._repository_available = self._fetch_repository_from_disk() - self._notices_available = self._fetch_notices_from_disk() + # decouple repository fetching from server startup + def fetch_data(): + self._repository_available = self._fetch_repository_from_disk() + self._notices_available = self._fetch_notices_from_disk() + + thread = threading.Thread(target=fetch_data) + thread.daemon = True + thread.start() ##~~ SettingsPlugin diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index a16107ec..507c5593 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -78,8 +78,14 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, self._console_logger.propagate = False def on_after_startup(self): - # refresh cache now if necessary so it's faster once the user connects to the instance - self.get_current_versions() + # refresh cache now if necessary so it's faster once the user connects to the instance - but decouple it from + # the server startup + def fetch_data(): + self.get_current_versions() + + thread = threading.Thread(target=fetch_data) + thread.daemon = True + thread.start() def _get_configured_checks(self): with self._configured_checks_mutex: diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index e7a6b375..20397ef7 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -819,6 +819,7 @@ class Server(object): kwargs.update(additional_request_data) try: + start = time.time() if plugin: logger.info("Preemptively caching {} (ui {}) for {!r}".format(route, plugin, kwargs)) else: @@ -832,7 +833,7 @@ class Server(object): builder = EnvironBuilder(**kwargs) app(builder.get_environ(), lambda *a, **kw: None) - logger.info("... done.".format(route, plugin, kwargs)) + logger.info("... done in {:.2f}s".format(time.time() - start)) except: logger.exception("Error while trying to preemptively cache {} for {!r}".format(route, kwargs))