Skip to content

仿真任务调度 API

simulation_bp 是前后端性能优化的关键。由于 CPD 模型模拟涉及复杂的常微分方程求解,该接口通过 Celery 异步队列 将请求与计算解耦,确保 Web 服务在高并发下的响应速度。


为了提供极致的用户体验,接口设计遵循了“提交即响应,过程可追踪”的原则。

支持两种模型算法:SIM (标准版) 与 SIM2 (增强/回填版)。

  • URL: /simulate/simulate2
  • Method: POST
  • Auth: @jwt_required()
  • HTTP Status: 202 Accepted (表示请求已接受并入队)
  • 参数预处理:调用 preprocess_params 统一物理量单位与类型。
  • 非阻塞设计:使用 .delay() 立即释放请求连接,不等待计算结果。
  • JSON 加速:使用 orjson 替代原生 json 库,提升 5-10 倍的序列化速度。

在任务完成后,系统并没有将数万行的计算结果直接塞进 Celery 的结果后端(防止 Redis 内存暴涨),而是采用了 侧路加载(Side-Loading) 策略:

  1. Worker 端:计算完成后,将大数据存入关系型数据库的 CalcResult 表。
  2. API 端:在 SUCCESS 状态下,仅通过 Celery 获取 record_id,再执行高效的 SQL 查询获取完整矩阵。
  3. 动态回填:对于 SIM2 模型,会额外提取 data_front 字典,用于前端输入框的数值自动校准。

# 核心逻辑:从数据库调取大数据,而不是直接从 Celery 任务对象取
result_entry = CalcResult.query.filter_by(record_id=record_id).first()
response_body = {
"status": "completed",
"result": {
"headers": result_entry.headers, # 表头信息
"results": result_entry.data_rows # 数万行的计算矩阵
}
}