Spaces:
Sleeping
Sleeping
修改启动命令为 Gunicorn,添加 Gunicorn 配置文件,移除 Uvicorn 启动逻辑,更新依赖项以支持 Gunicorn
Browse files- Dockerfile +2 -1
- app.py +0 -3
- gunicorn.conf.py +36 -0
- requirements.txt +1 -0
Dockerfile
CHANGED
|
@@ -44,4 +44,5 @@ RUN --mount=type=secret,id=HF_Token,mode=0444,required=true \
|
|
| 44 |
# git clone $(cat /run/secrets/HF_Token)
|
| 45 |
|
| 46 |
|
| 47 |
-
|
|
|
|
|
|
| 44 |
# git clone $(cat /run/secrets/HF_Token)
|
| 45 |
|
| 46 |
|
| 47 |
+
# 修改启动命令,使用配置文件
|
| 48 |
+
CMD ["gunicorn", "app:app", "-c", "gunicorn.conf.py"]
|
app.py
CHANGED
|
@@ -63,6 +63,3 @@ async def root():
|
|
| 63 |
return {"message": "Welcome to the API. Use /api/aaa or /api/bbb for processing."}
|
| 64 |
|
| 65 |
|
| 66 |
-
if __name__ == "__main__":
|
| 67 |
-
import uvicorn
|
| 68 |
-
uvicorn.run(app, host="0.0.0.0", port=7860)
|
|
|
|
| 63 |
return {"message": "Welcome to the API. Use /api/aaa or /api/bbb for processing."}
|
| 64 |
|
| 65 |
|
|
|
|
|
|
|
|
|
gunicorn.conf.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import multiprocessing
|
| 2 |
+
|
| 3 |
+
# 监听地址和端口
|
| 4 |
+
bind = "0.0.0.0:7860"
|
| 5 |
+
|
| 6 |
+
# 工作进程数,这里设置为 CPU 核心数 * 2 + 1
|
| 7 |
+
workers = min(multiprocessing.cpu_count() + 1, 3)
|
| 8 |
+
|
| 9 |
+
# 工作方式
|
| 10 |
+
# 方案1: 使用 Uvicorn 的 worker (推荐)
|
| 11 |
+
worker_class = "uvicorn.workers.UvicornWorker"
|
| 12 |
+
|
| 13 |
+
# 方案2: 使用 Uvicorn 的 worker 并开启 HTTP/2
|
| 14 |
+
# worker_class = "uvicorn.workers.UvicornH2Worker"
|
| 15 |
+
|
| 16 |
+
# 方案3: 使用传统的同步 worker (不推荐,会损失 FastAPI 的异步特性)
|
| 17 |
+
# worker_class = "sync"
|
| 18 |
+
|
| 19 |
+
# 超时时间
|
| 20 |
+
timeout = 300
|
| 21 |
+
|
| 22 |
+
# 并发客户端最大数量
|
| 23 |
+
worker_connections = 1000
|
| 24 |
+
|
| 25 |
+
# 进程名称前缀
|
| 26 |
+
proc_name = 'gunicorn_fastapi'
|
| 27 |
+
|
| 28 |
+
# 访问日志文件
|
| 29 |
+
accesslog = "access.log"
|
| 30 |
+
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
|
| 31 |
+
|
| 32 |
+
# 错误日志文件
|
| 33 |
+
errorlog = "error.log"
|
| 34 |
+
|
| 35 |
+
# 日志级别
|
| 36 |
+
loglevel = "info"
|
requirements.txt
CHANGED
|
@@ -18,3 +18,4 @@ tensorflow==2.16.2
|
|
| 18 |
pydantic==2.9.2
|
| 19 |
pydantic_core==2.23.4
|
| 20 |
nltk
|
|
|
|
|
|
| 18 |
pydantic==2.9.2
|
| 19 |
pydantic_core==2.23.4
|
| 20 |
nltk
|
| 21 |
+
gunicorn
|