mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-06-23 20:58:37 +00:00
Feature/memory optimization config (#108)
* feat(config): optimize memory usage to prevent OOM killer - Reduce brightness from 95 to 50 to lower power consumption - Reduce refresh rate from 120Hz to 100Hz to reduce CPU/memory pressure - Reduce background service workers from 3 to 1 per manager - Change hardware mapping from adafruit-hat-pwm to adafruit-hat - Expected memory savings: ~700MB reduction in background service usage - Addresses SIGKILL errors caused by memory exhaustion on Raspberry Pi Fixes: OOM killer terminating ledmatrix.service with status=9/KILL * revert display brightness * refactor(background-service): hardcode optimized settings and remove config blocks - Hardcode background service to 1 worker in all managers - Remove background_service config blocks from template - Simplify configuration for users - no need to adjust system settings - Memory optimization: ~700MB reduction in background service usage - Settings: 1 worker, 30s timeout, 3 retries (hardcoded) Files updated: - src/base_classes/sports.py - src/leaderboard_manager.py - src/odds_ticker_manager.py - src/soccer_managers.py - src/milb_manager.py - config/config.template.json This prevents OOM killer errors by reducing memory usage from 15 background threads to 5 threads total across all managers. * remove fallback in case of background service failure
This commit is contained in:
@@ -76,10 +76,6 @@ class BaseNBAManager(Basketball):
|
||||
# Clear invalid cache
|
||||
self.cache_manager.clear_cache(cache_key)
|
||||
|
||||
# If background service is disabled, fall back to synchronous fetch
|
||||
if not self.background_enabled or not self.background_service:
|
||||
return self._fetch_nba_api_data_sync(use_cache)
|
||||
|
||||
# Start background fetch
|
||||
self.logger.info(f"Starting background fetch for {season_year} season schedule...")
|
||||
|
||||
@@ -123,30 +119,6 @@ class BaseNBAManager(Basketball):
|
||||
return partial_data
|
||||
|
||||
return None
|
||||
|
||||
def _fetch_nba_api_data_sync(self, use_cache: bool = True) -> Optional[Dict]:
|
||||
"""
|
||||
Synchronous fallback for fetching NFL data when background service is disabled.
|
||||
"""
|
||||
now = datetime.now(pytz.utc)
|
||||
current_year = now.year
|
||||
cache_key = f"nba_schedule_{current_year}"
|
||||
|
||||
self.logger.info(f"Fetching full {current_year} season schedule from ESPN API (sync mode)...")
|
||||
try:
|
||||
response = self.session.get(ESPN_NBA_SCOREBOARD_URL, params={"dates": current_year, "limit":1000}, headers=self.headers, timeout=15)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
events = data.get('events', [])
|
||||
|
||||
if use_cache:
|
||||
self.cache_manager.set(cache_key, events)
|
||||
|
||||
self.logger.info(f"Successfully fetched {len(events)} events for the {current_year} season.")
|
||||
return {'events': events}
|
||||
except requests.exceptions.RequestException as e:
|
||||
self.logger.error(f"API error fetching full schedule: {e}")
|
||||
return None
|
||||
|
||||
def _fetch_data(self) -> Optional[Dict]:
|
||||
"""Fetch data using shared data mechanism or direct fetch for live."""
|
||||
|
||||
Reference in New Issue
Block a user