update
This commit is contained in:
@@ -10,6 +10,7 @@ class Settings:
|
||||
# 数据库配置
|
||||
DATABASE_CONFIG = {
|
||||
"host": "192.168.31.201",
|
||||
# "host": "127.0.0.1",
|
||||
"port": "5432",
|
||||
"user": "jack",
|
||||
"password": "aaaAAA111",
|
||||
|
||||
@@ -1,46 +1,173 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""主程序入口"""
|
||||
"""主程序入口 - FastAPI版本"""
|
||||
|
||||
import time
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from core.simulator import AlphaSimulator
|
||||
from config.settings import settings
|
||||
from utils.helpers import retry_on_exception
|
||||
|
||||
# 创建FastAPI应用
|
||||
app = FastAPI(
|
||||
title="Alpha因子模拟器API",
|
||||
description="通过HTTP接口触发的因子模拟器",
|
||||
version="1.0.0"
|
||||
)
|
||||
|
||||
# 全局变量
|
||||
_simulator = None
|
||||
_last_result = None # 存储上次执行结果
|
||||
_is_processing = False # 是否正在处理
|
||||
|
||||
|
||||
@retry_on_exception(max_retries=3, delay=5.0)
|
||||
def main_loop(simulator: AlphaSimulator) -> None:
|
||||
"""主循环"""
|
||||
if simulator.needs_token_refresh():
|
||||
print("Token需要刷新,重新登录...")
|
||||
simulator.login()
|
||||
|
||||
alpha_list = simulator.load_alpha_list()
|
||||
if not alpha_list:
|
||||
print("暂无待处理的alpha表达式,10分钟后重新检查...")
|
||||
time.sleep(600)
|
||||
return
|
||||
|
||||
print(f"共加载 {len(alpha_list)} 个需要模拟的因子表达式")
|
||||
success_count, fail_count = simulator.run_batch_simulation(alpha_list)
|
||||
print(f"本轮处理完成: 成功 {success_count} 个, 失败 {fail_count} 个")
|
||||
def initialize_simulator():
|
||||
"""初始化模拟器"""
|
||||
global _simulator
|
||||
if _simulator is None:
|
||||
_simulator = AlphaSimulator()
|
||||
_simulator.initialize()
|
||||
print("模拟器初始化完成")
|
||||
return _simulator
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
simulator = AlphaSimulator()
|
||||
simulator.initialize()
|
||||
@app.get("/")
|
||||
async def root():
|
||||
"""根路径,返回服务信息"""
|
||||
return {
|
||||
"service": "Alpha因子模拟器",
|
||||
"version": "1.0.0",
|
||||
"status": "running",
|
||||
"endpoints": {
|
||||
"run_simulation": "POST /run - 触发一次模拟执行",
|
||||
"last_result": "GET /result - 获取上次执行结果",
|
||||
"status": "GET /status - 查看服务状态",
|
||||
"health": "GET /health - 健康检查"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@app.post("/run")
|
||||
async def run_simulation():
|
||||
"""
|
||||
触发一次模拟执行
|
||||
执行顺序:
|
||||
1. 刷新token
|
||||
2. 加载alpha列表
|
||||
3. 执行批量模拟
|
||||
"""
|
||||
global _is_processing, _last_result
|
||||
|
||||
# 检查是否正在处理
|
||||
if _is_processing:
|
||||
return {
|
||||
"status": "busy",
|
||||
"message": "已有模拟任务正在执行中,请稍后再试",
|
||||
"timestamp": time.time()
|
||||
}
|
||||
|
||||
try:
|
||||
while True:
|
||||
main_loop(simulator)
|
||||
print(f"等待{settings.CHECK_INTERVAL // 60}分钟后继续检查...")
|
||||
time.sleep(settings.CHECK_INTERVAL)
|
||||
except KeyboardInterrupt:
|
||||
print("\n程序被用户中断")
|
||||
_is_processing = True
|
||||
|
||||
# 初始化模拟器
|
||||
simulator = initialize_simulator()
|
||||
|
||||
# 1. 刷新token
|
||||
print("刷新token...")
|
||||
simulator.login()
|
||||
|
||||
# 2. 加载alpha列表
|
||||
print("加载alpha列表...")
|
||||
alpha_list = simulator.load_alpha_list()
|
||||
|
||||
if not alpha_list:
|
||||
result = {
|
||||
"status": "no_data",
|
||||
"message": "数据库中没有待处理的alpha表达式",
|
||||
"timestamp": time.time()
|
||||
}
|
||||
_last_result = result
|
||||
return result
|
||||
|
||||
# 3. 执行批量模拟
|
||||
print(f"共加载 {len(alpha_list)} 个需要模拟的因子表达式")
|
||||
success_count, fail_count = simulator.run_batch_simulation(alpha_list)
|
||||
|
||||
result_message = f"处理完成: 成功 {success_count} 个, 失败 {fail_count} 个"
|
||||
print(result_message)
|
||||
|
||||
result = {
|
||||
"status": "completed",
|
||||
"message": result_message,
|
||||
"data": {
|
||||
"alpha_count": len(alpha_list),
|
||||
"success_count": success_count,
|
||||
"fail_count": fail_count
|
||||
},
|
||||
"timestamp": time.time()
|
||||
}
|
||||
|
||||
_last_result = result
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
print(f"程序执行异常: {e}")
|
||||
raise
|
||||
error_msg = f"模拟执行失败: {str(e)}"
|
||||
print(error_msg)
|
||||
|
||||
result = {
|
||||
"status": "error",
|
||||
"message": error_msg,
|
||||
"timestamp": time.time()
|
||||
}
|
||||
_last_result = result
|
||||
return result
|
||||
|
||||
finally:
|
||||
_is_processing = False
|
||||
|
||||
|
||||
@app.get("/result")
|
||||
async def get_last_result():
|
||||
"""获取上次执行的结果"""
|
||||
if _last_result is None:
|
||||
raise HTTPException(status_code=404, detail="暂无执行结果")
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"data": _last_result,
|
||||
"timestamp": time.time()
|
||||
}
|
||||
|
||||
|
||||
@app.get("/status")
|
||||
async def get_status():
|
||||
"""获取服务状态"""
|
||||
return {
|
||||
"is_processing": _is_processing,
|
||||
"simulator_initialized": _simulator is not None,
|
||||
"has_last_result": _last_result is not None,
|
||||
"timestamp": time.time()
|
||||
}
|
||||
|
||||
|
||||
@app.get("/health")
|
||||
async def health_check():
|
||||
"""健康检查端点"""
|
||||
return {
|
||||
"status": "healthy",
|
||||
"timestamp": time.time(),
|
||||
"simulator_initialized": _simulator is not None
|
||||
}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
import uvicorn
|
||||
|
||||
# 首次初始化
|
||||
initialize_simulator()
|
||||
print("服务正在启动...")
|
||||
|
||||
# 启动FastAPI服务
|
||||
uvicorn.run(
|
||||
app,
|
||||
host="0.0.0.0",
|
||||
port=8000,
|
||||
log_level="info"
|
||||
)
|
||||
Reference in New Issue
Block a user