mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 08:48:13 +00:00
Halt renders on errors or missing files
This commit is contained in:
@@ -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):
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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__':
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user