From 55d0ce87ea3135c6d72e2a30d289b708afce6f23 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= <sybren@stuvel.eu>
Date: Thu, 15 Nov 2018 12:48:14 +0100
Subject: [PATCH] Only send render status updates every 30 seconds

Previously it was done for every line of Blender output that contained
render time info, which was way too often.
---
 flamenco_worker/commands.py | 9 ++++++++-
 flamenco_worker/worker.py   | 1 +
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/flamenco_worker/commands.py b/flamenco_worker/commands.py
index 0c8fb5eb..3b94402c 100644
--- a/flamenco_worker/commands.py
+++ b/flamenco_worker/commands.py
@@ -608,6 +608,8 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
     substring_synchronizing = {'| Synchronizing object |', ' | Syncing '}
     seen_synchronizing_line = False
 
+    _last_activity_time: float = 0.0
+
     def __attrs_post_init__(self):
         super().__attrs_post_init__()
 
@@ -622,6 +624,8 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
         self.re_path_not_found = re.compile(r"Warning: Path '.*' not found")
         self.re_file_saved = re.compile(r"Saved: '(?P<filename>.*)'")
 
+        self._last_activity_time = 0.0
+
     def validate(self, settings: dict):
         blender_cmd, err = self._setting(settings, 'blender_cmd', True)
         if err:
@@ -737,7 +741,10 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
                    'the Synchronizing Objects lines)' % line
 
         render_info = self.parse_render_line(line)
-        if render_info:
+        now = time.time()
+        # Only update render info every this many seconds, and not for every line Blender produces.
+        if render_info and now - self._last_activity_time < 30:
+            self._last_activity_time = now
             # Render progress. Not interesting to log all of them, but we do use
             # them to update the render progress.
             # TODO: For now we return this as a string, but at some point we may want
diff --git a/flamenco_worker/worker.py b/flamenco_worker/worker.py
index 4b60c7eb..96b32e17 100644
--- a/flamenco_worker/worker.py
+++ b/flamenco_worker/worker.py
@@ -667,6 +667,7 @@ class FlamencoWorker:
             return self.loop.create_task(post)
         except Exception:
             self._log.exception('unable to notify Manager')
+            return None
 
     def go_to_state_asleep(self):
         """Starts polling for wakeup calls."""
-- 
GitLab