From 254c5068154fdee5a8ae6fe24de34697f268036f Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 22 Jul 2026 16:12:00 +0500 Subject: [PATCH] fix: auto-start all 10 worker loops on app startup --- src/vk_parser_app/admin.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/vk_parser_app/admin.py b/src/vk_parser_app/admin.py index d1bc33a..5245afa 100644 --- a/src/vk_parser_app/admin.py +++ b/src/vk_parser_app/admin.py @@ -27,7 +27,16 @@ from .db import fetch_int_setting, fetch_setting, get_pool from .security import hash_password, new_token, token_hash, verify_password from .text_utils import build_publication_text, normalize_hash_tag, parse_categories from .vk_api import VKAPIClient, normalize_vk_source -from .workers.ai_qualifier import normalize_model, response_usage +from .workers.ai_qualifier import AIQualifierWorker, normalize_model, response_usage +from .workers.ai_writer import AIWriterWorker +from .workers.daily_report import DailyReportWorker +from .workers.max_poster import MAXPoster +from .workers.parser import VKParserWorker +from .workers.site_poster import SitePoster +from .workers.tg_poster import TelegramPoster +from .workers.tg_reactor import TelegramReactor +from .workers.vk_poster import VKPoster +from .workers.vk_storage_uploader import TelegramStorageUploader COOKIE_NAME = "vk_parser_admin" VK_OAUTH_VERIFIER_COOKIE = "vk_oauth_verifier" @@ -1652,10 +1661,32 @@ def prepare_audit_row(row: Any) -> dict[str, Any]: return item +async def start_worker_task(worker: Any, name: str) -> None: + try: + logger.info("Starting background worker task: {}", name) + await worker.run_loop() + except Exception as exc: + logger.exception("Background worker task {} stopped unexpectedly: {}", name, exc) + + @app.on_event("startup") async def startup() -> None: await bootstrap_admin() await prune_audit_log() + workers = [ + ("ai-qualifier", AIQualifierWorker()), + ("ai-writer", AIWriterWorker()), + ("daily-report", DailyReportWorker()), + ("max-poster", MAXPoster()), + ("vk-parser", VKParserWorker()), + ("site-poster", SitePoster()), + ("tg-poster", TelegramPoster()), + ("tg-reactor", TelegramReactor()), + ("vk-poster", VKPoster()), + ("vk-storage-uploader", TelegramStorageUploader()), + ] + for name, worker in workers: + asyncio.create_task(start_worker_task(worker, name)) @app.get("/health")