05635b76b9
状态: - 9 个 sync task(stock_basic / kline_daily / kline_index / kline_5min / moneyflow / industry_sector / sector_features / share_snapshot / market_regime) - 数据源:baostock + mairui + 雪球(pysnowball) + 新浪(4 个) - 项目级约束:永远不用 akshare(已落实) - kline_5min 改用 DB 快照统一全量/增量逻辑 - 零后端 Chrome 扩展 xueqiu_sync(独立项目)
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
"""纯 worker 模式(无 web)— 启动调度器 + 健康监控。
|
|
|
|
用法:python -m app.worker
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import sys
|
|
import time
|
|
from pathlib import Path
|
|
|
|
_PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
|
if str(_PROJECT_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(_PROJECT_ROOT))
|
|
|
|
from app.core.config import settings
|
|
from app.core.db import ops as db_ops
|
|
from app.core.utils.logging import get_logger, setup_logging
|
|
|
|
setup_logging()
|
|
logger = get_logger("worker")
|
|
|
|
|
|
def main():
|
|
logger.info("[worker] market_data_sync worker 启动")
|
|
|
|
# 1. 注册数据源 + seed config
|
|
from app.core.datasource.registry import build_default_registry, seed_datasource_configs
|
|
build_default_registry()
|
|
seed_datasource_configs()
|
|
|
|
# 2. seed sync registry + 恢复卡死任务
|
|
from app.core.sync.registry import recover_interrupted_syncs, seed_sync_registry
|
|
seed_sync_registry()
|
|
n = recover_interrupted_syncs()
|
|
if n > 0:
|
|
logger.warning(f"[worker] 恢复了 {n} 个中断的同步任务")
|
|
|
|
# 3. seed 节假日
|
|
if settings.holidays_list:
|
|
db_ops.upsert_config(
|
|
"trading_calendar_holidays",
|
|
json.dumps(settings.holidays_list, ensure_ascii=False),
|
|
category="general",
|
|
description="A 股休市日",
|
|
)
|
|
|
|
# 4. seed 默认计划任务
|
|
if settings.scheduler_auto_seed:
|
|
from app.core.scheduler.scheduler import seed_schedule_configs
|
|
seed_schedule_configs()
|
|
|
|
# 5. 注册 sync job + 启动调度器 + 健康监控
|
|
from app.core.scheduler.scheduler import register_sync_jobs, start_scheduler
|
|
from app.core.datasource.registry import start_health_monitor
|
|
register_sync_jobs()
|
|
start_scheduler()
|
|
start_health_monitor()
|
|
|
|
logger.info("[worker] 已启动调度器 + 健康监控,按 Ctrl+C 退出")
|
|
|
|
try:
|
|
while True:
|
|
time.sleep(60)
|
|
except KeyboardInterrupt:
|
|
logger.info("[worker] 收到 SIGINT,退出")
|
|
from app.core.scheduler.scheduler import stop_scheduler
|
|
stop_scheduler()
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|