基于 Flask —— 异步任务处理接口服务

1.Flask 简介

Flask 是一个轻量级的 Python Web 框架,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎开发。它以简洁、灵活著称,适合快速构建小型到中型 Web 应用或作为微服务框架使用。

核心特点

轻量级:核心功能精简,可通过扩展灵活添加其他功能(如数据库支持、表单验证等)。

易于学习:代码结构直观,适合初学者快速上手。

模块化设计:通过扩展(如 Flask-SQLAlchemy、Flask-Login)集成额外功能。

开发友好:内置开发服务器和调试器,支持热重载。

基本组件

1.路由(Routing):通过装饰器 @app.route() 定义 URL 规则和处理函数。

python 复制代码
@app.route('/')
def home():
    return "Hello, Flask!"

2.模板引擎(Jinja2):支持动态 HTML 渲染。

3.请求与响应 :通过 request 和 response 对象处理 HTTP 数据。

python 复制代码
from flask import request
@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    return f"User {username} logged in."

安装与运行

1.安装 Flask:

python 复制代码
pip install flask

2.最小应用示例:

python 复制代码
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

打开127.0.0.1:5000的结果:

常见扩展

  • Flask-SQLAlchemy:集成 SQLAlchemy 实现数据库操作。
  • Flask-WTF:处理 Web 表单及验证。
  • Flask-Login:管理用户认证和会话。

适用场景

Flask 的灵活性和简洁性使其成为 Python Web 开发的热门选择,尤其适合需要高度定制化的项目。

2.接下来介绍一个基于Flask写的异步任务处理接口

1)导入需要的工具

python 复制代码
from flask import Flask, request, jsonify
import time
import threading
from concurrent.futures import ThreadPoolExecutor
import requests

Flask:做网站 / 接口的框架

jsonify:返回 JSON 格式数据(给接口用)

threading:多线程(后台同时跑多个任务)

ThreadPoolExecutor:线程池(控制最多跑几个任务)

requests:调用别的接口

2)创建 Flask 服务 + 中文不乱码配置

python 复制代码
app = Flask(__name__)
app.json.ensure_ascii = False
app.config['JSONIFY_MIMETYPE'] = "application/json; charset=utf-8"

创建服务

让中文不乱码(你刚才问的就是这个)

3)全局变量:锁、线程池、任务状态

python 复制代码
lock = threading.Lock()
executor = ThreadPoolExecutor(max_workers=2)
task_status = {}

lock:防止多线程同时改数据出错

executor:最多同时跑 2 个任务

task_status:存所有任务的状态(排队中 / 分析中 / 完成)

4)三个测试接口:API1、API2、API3

python 复制代码
/api1
/api2
/api3

作用:模拟耗时任务(每个等 5 秒)用来测试:任务在后台慢慢跑。

5)核心:真正执行任务的函数

python 复制代码
def run_task(test):

作用:

把任务状态改成 分析中

依次调用 API1、API2、API3

全部跑完 → 状态改成 完成

这就是后台异步执行的逻辑。

6)提交任务的接口

python 复制代码
/submit?test=任务名

你访问这个接口 → 提交任务 → 放进线程池 → 后台自动跑

返回:

python 复制代码
{
  "code": 200,
  "msg": "任务已提交到线程池",
  "test": "任务1",
  "状态": "paiduzhong"
}

7)查看任务状态的接口

python 复制代码
/status

返回所有任务当前进度:

排队中

分析中

完成

8)启动服务

python 复制代码
app.run(host="0.0.0.0", port=5000)

启动网站服务,端口 5000

它能实现什么效果?(你运行后就能看到)

  1. 访问 /submit?test=课堂1 → 提交任务
  2. 后台自动调用 API1、API2、API3(每个等 5 秒)
  3. 访问 /status → 看到任务是:
    • paiduzhong 排队中
    • fenxizhong 分析中
    • wancheng 完成
相关推荐
IT_Octopus3 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148114 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
大鸡腿同学4 小时前
手心向上,手心向下
后端
CCblandy5 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
Cc.Y6 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究6 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology
Smoothcloud润云6 小时前
PyTorch推理服务模型热切换与失败回滚实战:降低版本更新中断
服务器·人工智能·pytorch·python·深度学习·gpu
jsjzsl26 小时前
递归自改进系统(RSI)的本质是自发对称破缺:智能爆炸有界—— AI研发切记盲目投入
人工智能·python·算法
2601_954811827 小时前
机器视觉教学套件选型指南:五维技术参数对比与课程体系评估
python·数码相机
凤山老林7 小时前
Spring Boot 集成 Sa-Token 实现高可用权限认证:登录鉴权、动态路由权限与接口防重放实战
spring boot·后端·sa-token·bootstrap