Files
crawler-plugin/backend/app.py
T
huangzd1997 228d481211 perf(全链路): 连接池/事务边界/轮询与 IO 效率收口
Java:
- LLM 180s 读超时不再被全局 call-timeout 静默截断成 90s(长思考请求被掐断→重试→付费网关二次计费)
- 代理 HttpClient 缓存改有界 LRU(jikip 每次提取新 IP,无界缓存持续泄漏 selector 线程与连接池)
- 12 个 service 的 Redis 任务锁移出 @Transactional(自旋最坏 10s 白占 DB 连接,池仅 30),远端对象删/传改 afterCommit
- 结果文件 Job 闸门拒绝时不再回退内联执行(改重新入队,避免把背压转嫁给 MQ 消费线程)
- imagevideo 每秒扫描加列投影、过期清理加 LIMIT;权限页整表查询改列投影(不再拉回密码哈希)
- 哈希改 HexFormat;补 5 处"不能改"的技术依据注释(批量插入会丢回填主键、流式丢模板与图片等)

前端:4 个工具页轮询改轻量端点(带 fallback);PriceTrack 快照节流写盘;候选店铺表分页;页面隐藏时停表

客户端:HTTP 连接池按出口复用(Session 仍每请求新建,保持无跨请求状态);品牌检测 WIPO 逐请求握手;
代理配置按 mtime 缓存;串行任务改专属池;异常降级为标签页重连;紫鸟启动改端口轮询;模板编译缓存;
日志上报连接与落盘收口;Flask 版本 API 改按请求复用连接
2026-09-15 23:01:59 +08:00

50 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
数富AI - Flask 后端
管理后台(页面 web_source/ 与 /api/admin/* 蓝图)已整体迁移至 Java + Vue
/admin-vue/,见 docs/specs/11-flask-removal-cutover.md,旧代码于 task-283 删除)。
本进程当前只保留客户端仍在使用的版本公开 API/api/version、/api/version/latest
(桌面客户端 app_client 的更新检查仍以本进程 15124 为 base_url,切换前勿下线)。
"""
import os
import secrets
from flask import Flask
from flask_cors import CORS
from utils.db import close_db, init_db
from blueprints.version import version_bp
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__)
# CORS配置:限制为可信域名(版本检查由桌面客户端/网页发起,跨域仍受限)
CORS(app, resources={
r"/api/*": {
"origins": [
"http://localhost:*",
"http://127.0.0.1:*",
"https://*.aishufu.top",
"http://*.aishufu.top"
],
"methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
"allow_headers": ["Authorization", "Content-Type", "X-Requested-With", "X-Device-Id"],
"supports_credentials": True
}
})
app.secret_key = os.environ.get('SECRET_KEY', secrets.token_hex(32))
# 注册蓝图:仅版本公开 API(管理后台 API 已迁 Java,见模块 docstring
app.register_blueprint(version_bp)
# 请求级数据库连接随请求结束释放(utils/db.get_db 复用同一连接)
app.teardown_appcontext(close_db)
def run_app(host='0.0.0.0', port=15124):
init_db()
app.run(host=host, port=port, threaded=True, use_reloader=False)
if __name__ == '__main__':
run_app()