37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
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}")
|