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