import structlog logger = structlog.get_logger("studio_api.gunicorn") def post_fork(server, worker): """ Called just after a gunicornworker has been forked. This is where we initialize singletons that need to be set up in each worker process. """ logger.info(f"Worker {worker.pid} forked, initializing singletons...") try: # See https://docs.statsig.com/server-core/python-core/#process-forking-and-wsgi-servers from studio_api.bots.singletons import feature_flags if not feature_flags.initialized: feature_flags.initialize() logger.info(f"Worker {worker.pid}: Statsig initialized successfully") else: logger.warning(f"Worker {worker.pid}: Statsig already initialized") except Exception as e: logger.error(f"Worker {worker.pid}: Failed to initialize singletons: {e}") # Don't raise the exception - we want the worker to continue even if singletons fail # The application will fall back to mock implementations if needed