From cc444966f0d504a3101f05e75ceaf7c210f01a60 Mon Sep 17 00:00:00 2001 From: jack Date: Mon, 1 Dec 2025 19:51:58 +0800 Subject: [PATCH] update --- config/settings.py | 1 + main.py | 187 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 158 insertions(+), 30 deletions(-) diff --git a/config/settings.py b/config/settings.py index 50dd6d3..c26809e 100644 --- a/config/settings.py +++ b/config/settings.py @@ -10,6 +10,7 @@ class Settings: # 数据库配置 DATABASE_CONFIG = { "host": "192.168.31.201", + # "host": "127.0.0.1", "port": "5432", "user": "jack", "password": "aaaAAA111", diff --git a/main.py b/main.py index 2065f1e..e6256b1 100644 --- a/main.py +++ b/main.py @@ -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 # 是否正在处理 + + +def initialize_simulator(): + """初始化模拟器""" + global _simulator + if _simulator is None: + _simulator = AlphaSimulator() + _simulator.initialize() + print("模拟器初始化完成") + return _simulator -@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 +@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 - 健康检查" + } + } - print(f"共加载 {len(alpha_list)} 个需要模拟的因子表达式") - success_count, fail_count = simulator.run_batch_simulation(alpha_list) - print(f"本轮处理完成: 成功 {success_count} 个, 失败 {fail_count} 个") +@app.post("/run") +async def run_simulation(): + """ + 触发一次模拟执行 + 执行顺序: + 1. 刷新token + 2. 加载alpha列表 + 3. 执行批量模拟 + """ + global _is_processing, _last_result -def main(): - """主函数""" - simulator = AlphaSimulator() - simulator.initialize() + # 检查是否正在处理 + 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() \ No newline at end of file + import uvicorn + + # 首次初始化 + initialize_simulator() + print("服务正在启动...") + + # 启动FastAPI服务 + uvicorn.run( + app, + host="0.0.0.0", + port=8000, + log_level="info" + ) \ No newline at end of file