This repository has been archived on 2026-10-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
NeteaseUrl/web/main.py
T
snowy-yang 9f56f68b66 chore(async-infra): 异步基础层 + 工具链 + 清理
异步基础层(core/):
- db.py   aiosqlite + WAL:读路径无锁并发、写路径 asyncio.Lock 串行,
          busy_timeout 自旋——实现「读写同时进行」(旧实现用 RLock 全读串行)
- http_client.py  aiohttp 连接池 + 有界重试(5xx 重试 / 4xx 不重试)+
          响应体上限 + 流式接口;按事件循环隔离 session(支持迁移期双 loop)

工具链:
- pyproject.toml   ruff(E/F/W/I/B/UP/C4/ASYNC/S/RUF) + pyright(basic) + pytest(asyncio auto)
- requirements-fastapi.txt  FastAPI/aiohttp/aiosqlite/aiofiles 等目标栈
- requirements-dev.txt      开发依赖(pytest/ruff/pyright)

清理:删除无用脚本 _csscheck.py 与产物标记 _css_ok.txt/_pkg_ok.txt,同步 .gitignore

验证:pytest 10/10(含「写 200 条同时 4 读协程零异常」并发用例);
ruff All checks passed;pyright 0 errors。
2026-09-26 00:24:00 +08:00

24 lines
833 B
Python

# -*- coding: utf-8 -*-
"""FastAPI 服务入口(uvicorn)。
开发期启动: .venv/Scripts/python.exe web/main.py
生产切换前需先将状态/任务模型与既有 Flask 进程统一(见迁移计划阶段 C)。
"""
import os
import sys
import uvicorn
# 直接以 `python web/main.py` 运行时,sys.path[0] 是 web/ 而非项目根——
# 补上项目根,保证 `import core` / `import music_api` / `import web.app` 可用。
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from web.app import create_app
# 生产可在联调期临时打开 Flask 兜底(未迁移路由回落到遗留应用)
app = create_app(serve_flask_fallback=os.environ.get('FASTAPI_FLASK_FALLBACK') == '1')
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=5000, log_level='info')