73 lines
2.0 KiB
Python
Executable File
73 lines
2.0 KiB
Python
Executable File
"""
|
|
自动化回测服务 - 主入口
|
|
启动 FastAPI 服务,接受回测任务提交,执行回测,返回结果
|
|
遵循 vnpy 原生设计,只做外层封装
|
|
"""
|
|
import uvicorn
|
|
from contextlib import asynccontextmanager
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from .config import settings
|
|
from .api import router
|
|
from .task_queue import task_queue
|
|
from .models import ApiResponse, HealthCheckResponse
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""应用生命周期:启动时开启worker线程,关闭时停止"""
|
|
# 启动
|
|
task_queue.start_worker_pool()
|
|
print(f"✅ 回测服务启动 (max_workers={settings.max_workers})")
|
|
yield
|
|
# 关闭
|
|
task_queue.close_worker_pool()
|
|
print("回测服务已停止")
|
|
|
|
|
|
app = FastAPI(
|
|
title="sanguo 自动化回测服务",
|
|
description="基于 vnpy 原生 BacktestingEngine 的自动化回测API服务",
|
|
version="1.0.0",
|
|
lifespan=lifespan
|
|
)
|
|
|
|
# CORS 配置
|
|
if settings.cors_allow_all:
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# 注册API路由
|
|
app.include_router(router, tags=["backtest"])
|
|
|
|
|
|
@app.get("/api/backtest/health", summary="服务健康检查", response_model=ApiResponse[HealthCheckResponse])
|
|
def health():
|
|
"""服务健康检查,返回当前任务统计"""
|
|
return ApiResponse(
|
|
code=0,
|
|
msg="ok",
|
|
data=HealthCheckResponse(
|
|
pending_count=len(task_queue.pending_tasks),
|
|
running_count=len(task_queue.running_tasks),
|
|
completed_count=len(task_queue.completed_tasks),
|
|
failed_count=len(task_queue.failed_tasks),
|
|
max_workers=settings.max_workers
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run(
|
|
"backtest_service.main:app",
|
|
host=settings.host,
|
|
port=settings.port,
|
|
reload=settings.debug,
|
|
)
|