Halt renders on errors or missing files

This commit is contained in:
Brett Williams
2023-05-27 13:26:10 -05:00
parent cd948634ad
commit 58113f423c
4 changed files with 21 additions and 10 deletions

View File

@@ -113,8 +113,7 @@ class AERenderWorker(BaseRenderWorker):
self.warnings.append(trimmed)
logging.warning(trimmed)
elif line.startswith('aerender ERROR') or 'ERROR:' in line:
self.errors.append(line)
logging.error(line)
self.log_error(line)
def _update_progress(self, line):

View File

@@ -180,9 +180,8 @@ class BlenderRenderWorker(BaseRenderWorker):
logger.debug(
'Frame:{0} | Mem:{1} | Time:{2} | Remaining:{3}'.format(self.current_frame, memory_use,
time_elapsed, time_remaining))
elif 'error' in line.lower():
logger.error(line)
self.errors.append(line)
elif "file doesn't exist" in line.lower() or 'error' in line.lower():
self.log_error(line)
elif 'Saved' in line or 'Saving' in line or 'quit' in line:
match = re.match(r'Time: (.*) \(Saving', line)
if match:

View File

@@ -78,7 +78,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
self.current_frame = stats['current_frame']
time_elapsed = stats['time_elapsed']
elif "not found" in line:
self.errors.append(line)
self.log_error(line)
if __name__ == '__main__':

View File

@@ -64,6 +64,7 @@ class BaseRenderWorker(object):
self.status = RenderStatus.NOT_STARTED
self.warnings = []
self.errors = []
self.halt_on_errors = True
self.failed_attempts = 0
self.maximum_attempts = 1
@@ -162,7 +163,7 @@ class BaseRenderWorker(object):
return_code = self.__process.wait()
self.end_time = datetime.now()
# Return early if job was cancelled
if self.status is RenderStatus.CANCELLED:
if self.status in [RenderStatus.CANCELLED, RenderStatus.ERROR]:
self.is_finished = True
return
@@ -192,17 +193,29 @@ class BaseRenderWorker(object):
return self.__thread.is_alive()
return False
def stop(self):
def log_error(self, error_line):
logger.error(error_line)
self.errors.append(error_line)
if self.halt_on_errors:
self.stop(is_error=True)
def stop(self, is_error=False):
if self.__process:
try:
self.status = RenderStatus.CANCELLED
if self.status in [RenderStatus.RUNNING, RenderStatus.NOT_STARTED, RenderStatus.SCHEDULED]:
if is_error:
err_message = self.errors[-1] if self.errors else 'Unknown error'
logger.error(f"Halting render due to error: {err_message}")
self.status = RenderStatus.ERROR
else:
self.status = RenderStatus.CANCELLED
self.maximum_attempts = 0
process = psutil.Process(self.__process.pid)
for proc in process.children(recursive=True):
proc.kill()
process.kill()
except Exception as e:
logger.error(f"Exception stopping the process: {e}")
logger.debug(f"Error stopping the process: {e}")
def percent_complete(self):
return 0