# scheduler.py (erweitert) from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.interval import IntervalTrigger from config import SETTINGS, load_feeds import logging logger = logging.getLogger(__name__) class NewsScheduler: def __init__(self): self.scheduler = AsyncIOScheduler() self.processed_links = set() self.max_history = 1000 def cleanup_processed_links(self): # Verhindere, dass die Menge zu groß wird if len(self.processed_links) > self.max_history: self.processed_links = set(list(self.processed_links)[-self.max_history:]) async def job_wrapper(self): try: await process_and_send_news() self.cleanup_processed_links() except Exception as e: logger.error(f"Scheduler-Job fehlgeschlagen: {str(e)}") def start(self): feeds = load_feeds() # Dynamische Job-Erstellung basierend auf Feed-Konfiguration for feed in feeds: trigger = IntervalTrigger( minutes=feed.get("interval", SETTINGS["check_interval"]) self.scheduler.add_job( self.job_wrapper, trigger=trigger, kwargs={"feed": feed}, max_instances=3 ) self.scheduler.start() logger.info("Scheduler gestartet mit %d Jobs", len(self.scheduler.get_jobs())) async def process_and_send_news(feed=None): # Implementierung hier pass