import json import asyncio import redis as sync_redis from celery_app.worker import app from app.core.config import settings from loguru import logger def _sync_redis(): return sync_redis.from_url(settings.REDIS_URL, decode_responses=True) @app.task(name="celery_app.tasks.market_tasks.refresh_heatmap_cache") def refresh_heatmap_cache(): """Pull all A-share spot quotes and push to Redis cache.""" try: from app.services.stock_service import get_all_stocks_spot data = asyncio.run(get_all_stocks_spot()) r = _sync_redis() r.setex("market:heatmap", 60, json.dumps(data)) logger.info(f"Heatmap cache refreshed: {len(data)} stocks") except Exception as e: logger.error(f"refresh_heatmap_cache error: {e}") @app.task(name="celery_app.tasks.market_tasks.refresh_market_overview") def refresh_market_overview(): """Pull major index data and push to Redis cache.""" try: from app.services.stock_service import get_market_overview data = asyncio.run(get_market_overview()) r = _sync_redis() r.setex("market:overview", 120, json.dumps(data)) logger.info(f"Market overview refreshed: {len(data)} indices") except Exception as e: logger.error(f"refresh_market_overview error: {e}")