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)
|
self.warnings.append(trimmed)
|
||||||
logging.warning(trimmed)
|
logging.warning(trimmed)
|
||||||
elif line.startswith('aerender ERROR') or 'ERROR:' in line:
|
elif line.startswith('aerender ERROR') or 'ERROR:' in line:
|
||||||
self.errors.append(line)
|
self.log_error(line)
|
||||||
logging.error(line)
|
|
||||||
|
|
||||||
def _update_progress(self, line):
|
def _update_progress(self, line):
|
||||||
|
|
||||||
|
|||||||
@@ -180,9 +180,8 @@ class BlenderRenderWorker(BaseRenderWorker):
|
|||||||
logger.debug(
|
logger.debug(
|
||||||
'Frame:{0} | Mem:{1} | Time:{2} | Remaining:{3}'.format(self.current_frame, memory_use,
|
'Frame:{0} | Mem:{1} | Time:{2} | Remaining:{3}'.format(self.current_frame, memory_use,
|
||||||
time_elapsed, time_remaining))
|
time_elapsed, time_remaining))
|
||||||
elif 'error' in line.lower():
|
elif "file doesn't exist" in line.lower() or 'error' in line.lower():
|
||||||
logger.error(line)
|
self.log_error(line)
|
||||||
self.errors.append(line)
|
|
||||||
elif 'Saved' in line or 'Saving' in line or 'quit' in line:
|
elif 'Saved' in line or 'Saving' in line or 'quit' in line:
|
||||||
match = re.match(r'Time: (.*) \(Saving', line)
|
match = re.match(r'Time: (.*) \(Saving', line)
|
||||||
if match:
|
if match:
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class FFMPEGRenderWorker(BaseRenderWorker):
|
|||||||
self.current_frame = stats['current_frame']
|
self.current_frame = stats['current_frame']
|
||||||
time_elapsed = stats['time_elapsed']
|
time_elapsed = stats['time_elapsed']
|
||||||
elif "not found" in line:
|
elif "not found" in line:
|
||||||
self.errors.append(line)
|
self.log_error(line)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ class BaseRenderWorker(object):
|
|||||||
self.status = RenderStatus.NOT_STARTED
|
self.status = RenderStatus.NOT_STARTED
|
||||||
self.warnings = []
|
self.warnings = []
|
||||||
self.errors = []
|
self.errors = []
|
||||||
|
self.halt_on_errors = True
|
||||||
self.failed_attempts = 0
|
self.failed_attempts = 0
|
||||||
self.maximum_attempts = 1
|
self.maximum_attempts = 1
|
||||||
|
|
||||||
@@ -162,7 +163,7 @@ class BaseRenderWorker(object):
|
|||||||
return_code = self.__process.wait()
|
return_code = self.__process.wait()
|
||||||
self.end_time = datetime.now()
|
self.end_time = datetime.now()
|
||||||
# Return early if job was cancelled
|
# Return early if job was cancelled
|
||||||
if self.status is RenderStatus.CANCELLED:
|
if self.status in [RenderStatus.CANCELLED, RenderStatus.ERROR]:
|
||||||
self.is_finished = True
|
self.is_finished = True
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -192,9 +193,21 @@ class BaseRenderWorker(object):
|
|||||||
return self.__thread.is_alive()
|
return self.__thread.is_alive()
|
||||||
return False
|
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:
|
if self.__process:
|
||||||
try:
|
try:
|
||||||
|
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.status = RenderStatus.CANCELLED
|
||||||
self.maximum_attempts = 0
|
self.maximum_attempts = 0
|
||||||
process = psutil.Process(self.__process.pid)
|
process = psutil.Process(self.__process.pid)
|
||||||
@@ -202,7 +215,7 @@ class BaseRenderWorker(object):
|
|||||||
proc.kill()
|
proc.kill()
|
||||||
process.kill()
|
process.kill()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Exception stopping the process: {e}")
|
logger.debug(f"Error stopping the process: {e}")
|
||||||
|
|
||||||
def percent_complete(self):
|
def percent_complete(self):
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user