Python 异步处理或后台任务处理 (模拟用户前台交互及接口调用流程)

模拟用户前台交互及接口调用流程
1. 用户前台交互流程

  • 步骤1: 用户在前端界面点击"新建报告"按钮
  • 步骤2: 前端立即显示"报告创建成功"提示信息
  • 步骤3: 用户可继续其他操作,无需等待后台处理完成
  • 步骤4: 后台静默处理报告生成任务
    2. 接口调用流程
  • 步骤1: 前端发送POST请求到 /api/reports 接口
  • 步骤2: 后端接收到请求,调用 create_report_request 函数
  • 步骤3: 立即返回HTTP 202状态码和成功响应
  • 步骤4: 后台通过 async_generate_report 启动异步任务
  • 步骤5: generate_report 在线程池中执行耗时操作
    3. 技术实现要点
  • 使用 ThreadPoolExecutor 实现后台任务处理
  • 通过 future 对象管理异步任务状态
  • 前端与后端通过HTTP状态码区分同步/异步响应
  • 后台任务完成后可通过回调或轮询方式通知前端
import asyncio
import threading
import time
from concurrent.futures import ThreadPoolExecutor

# 模拟报告生成函数
def generate_report(report_id, content):
    """模拟耗时的报告生成过程"""
    print(f"开始生成报告 {report_id}...")
    time.sleep(5)  # 模拟耗时操作
    print(f"报告 {report_id} 生成完成")
    return f"Report_{report_id}.pdf"

# 异步处理报告生成
def async_generate_report(report_id, content):
    """在后台线程中生成报告"""
    with ThreadPoolExecutor() as executor:
        future = executor.submit(generate_report, report_id, content)
        return future

# 主处理函数
def create_report_request(content):
    """处理创建报告请求"""
    report_id = "REP001"
    
    # 立即返回创建成功的响应
    print("报告创建请求已接收,正在后台处理...")
    
    # 启动后台任务
    async_task = async_generate_report(report_id, content)
    
    return {
        "status": "success",
        "message": "报告创建成功",
        "report_id": report_id,
        "task": async_task
    }

# 示例使用
if __name__ == "__main__":
    # 用户请求创建报告
    result = create_report_request("年度销售数据")
    print(f"返回给用户: {result['message']}")
    
    # 后台继续处理(这里为了演示等待完成)
    report_file = result['task'].result()
    print(f"最终生成的报告文件: {report_file}")


posted @ 2025-12-02 17:07  乐乐乐乐乐乐樂  阅读(1)  评论(0)    收藏  举报
jQuery火箭图标返回顶部代码