mirror of
https://github.com/blw1138/Zordon.git
synced 2025-12-17 16:58:12 +00:00
Worker class cleanup
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
from datetime import datetime
|
||||
import io
|
||||
import logging
|
||||
import os
|
||||
@@ -28,9 +27,9 @@ def string_to_status(string):
|
||||
return RenderStatus.ERROR
|
||||
|
||||
|
||||
class RenderWorker(object):
|
||||
class BaseRenderWorker(object):
|
||||
|
||||
renderer = 'GenericRenderer'
|
||||
renderer = 'BaseRenderWorker'
|
||||
render_engine = None
|
||||
supported_extensions = []
|
||||
install_paths = []
|
||||
@@ -57,7 +56,7 @@ class RenderWorker(object):
|
||||
|
||||
# Ranges
|
||||
self.total_frames = 0
|
||||
self.last_frame = 0
|
||||
self.current_frame = 0
|
||||
|
||||
# Logging
|
||||
self.log_path = None
|
||||
@@ -118,10 +117,11 @@ class RenderWorker(object):
|
||||
|
||||
# Setup logging
|
||||
try:
|
||||
log_dir = os.path.join(os.path.dirname(self.input), 'logs')
|
||||
if not os.path.exists(log_dir):
|
||||
os.makedirs(log_dir)
|
||||
self.log_path = os.path.join(log_dir, os.path.basename(self.input)) + '.log'
|
||||
if not self.log_path:
|
||||
log_dir = os.path.join(os.path.dirname(self.input), 'logs')
|
||||
if not os.path.exists(log_dir):
|
||||
os.makedirs(log_dir)
|
||||
self.log_path = os.path.join(log_dir, os.path.basename(self.input)) + '.log'
|
||||
logger.info('Logs saved in {}'.format(self.log_path))
|
||||
except Exception as e:
|
||||
logger.error("Error setting up logging: {}".format(e))
|
||||
@@ -134,38 +134,41 @@ class RenderWorker(object):
|
||||
# Start process and get updates
|
||||
subprocess_cmds = self._generate_subprocess()
|
||||
logger.debug("Renderer commands generated - {}".format(" ".join(subprocess_cmds)))
|
||||
self.process = subprocess.Popen(subprocess_cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=False)
|
||||
self.process = subprocess.Popen(subprocess_cmds, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
universal_newlines=False)
|
||||
self.start_time = datetime.now()
|
||||
f = open(self.log_path, "a")
|
||||
f.write("{3} - Starting {0} {1} Render for {2}\n".format(self.renderer, self.version(), self.input, self.start_time.isoformat()))
|
||||
for c in io.TextIOWrapper(self.process.stdout, encoding="utf-8"): # or another encoding
|
||||
f.write(c)
|
||||
logger.debug("RENDERER: {}".format(c.strip()))
|
||||
self.last_output = c.strip()
|
||||
self._parse_stdout(c.strip())
|
||||
f.write('\n')
|
||||
|
||||
# Check return codes
|
||||
return_code = self.process.wait()
|
||||
self.end_time = datetime.now()
|
||||
# Return early if job was cancelled
|
||||
if self.status is RenderStatus.CANCELLED:
|
||||
self.is_finished = True
|
||||
return
|
||||
with open(self.log_path, "a") as f:
|
||||
|
||||
duration = self.end_time - self.start_time
|
||||
f.write("{3} - Starting {0} {1} Render for {2}\n".format(self.renderer, self.version(), self.input,
|
||||
self.start_time.isoformat()))
|
||||
for c in io.TextIOWrapper(self.process.stdout, encoding="utf-8"): # or another encoding
|
||||
f.write(c)
|
||||
logger.debug(f"{self.renderer}Worker: {c.strip()}")
|
||||
self.last_output = c.strip()
|
||||
self._parse_stdout(c.strip())
|
||||
f.write('\n')
|
||||
|
||||
if return_code:
|
||||
message = f"{self.renderer} render failed with return_code {return_code} after {duration}"
|
||||
logger.error(message)
|
||||
self.failed_attempts = self.failed_attempts + 1
|
||||
else:
|
||||
message = f"{self.renderer} render completed successfully in {duration}"
|
||||
logger.info(message)
|
||||
self.status = RenderStatus.COMPLETED
|
||||
# Check return codes
|
||||
return_code = self.process.wait()
|
||||
self.end_time = datetime.now()
|
||||
# Return early if job was cancelled
|
||||
if self.status is RenderStatus.CANCELLED:
|
||||
self.is_finished = True
|
||||
return
|
||||
|
||||
f.write(message)
|
||||
f.close()
|
||||
duration = self.end_time - self.start_time
|
||||
|
||||
if return_code:
|
||||
message = f"{self.renderer} render failed with return_code {return_code} after {duration}"
|
||||
logger.error(message)
|
||||
self.failed_attempts = self.failed_attempts + 1
|
||||
else:
|
||||
message = f"{self.renderer} render completed successfully in {duration}"
|
||||
logger.info(message)
|
||||
self.status = RenderStatus.COMPLETED
|
||||
|
||||
f.write(message)
|
||||
|
||||
if self.failed_attempts >= self.maximum_attempts and self.status is not RenderStatus.CANCELLED:
|
||||
logger.error('{} Render of {} failed after {} attempts'.format(self.renderer, self.input, self.failed_attempts))
|
||||
|
||||
Reference in New Issue
Block a user