#!/usr/bin/env python3 import logging import os import socket import threading import time import yaml from lib.job_server import server from lib.render_queue import RenderQueue def start_server(background_thread=False): def eval_loop(delay_sec=1): while True: RenderQueue.evaluate_queue() time.sleep(delay_sec) with open('config.yaml') as f: config = yaml.load(f, Loader=yaml.FullLoader) logging.basicConfig(format='%(asctime)s: %(levelname)s: %(module)s: %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=config.get('server_log_level', 'INFO').upper()) server.config['UPLOAD_FOLDER'] = os.path.expanduser(config['upload_folder']) server.config['MAX_CONTENT_PATH'] = config['max_content_path'] # Get hostname and render clients RenderQueue.host_name = socket.gethostname() server.config['HOSTNAME'] = RenderQueue.host_name if not RenderQueue.render_clients: RenderQueue.render_clients = [RenderQueue.host_name] # disable most Flask logging flask_log = logging.getLogger('werkzeug') flask_log.setLevel(config.get('flask_log_level', 'ERROR').upper()) # Set up the RenderQueue object RenderQueue.load_state() thread = threading.Thread(target=eval_loop, kwargs={'delay_sec': config.get('queue_eval_seconds', 1)}, daemon=True) thread.start() logging.info(f"Starting Zordon Render Server - Hostname: '{RenderQueue.host_name}'") if background_thread: server_thread = threading.Thread( target=lambda: server.run(host='0.0.0.0', port=RenderQueue.port, debug=False, use_reloader=False)) server_thread.start() server_thread.join() else: server.run(host='0.0.0.0', port=RenderQueue.port, debug=config.get('flask_debug_enable', False), use_reloader=True, threaded=True) if __name__ == '__main__': start_server()