BuckLakeAI / gunicorn.conf.py
parkerjj's picture
修改启动命令为 Uvicorn,调整 Gunicorn 配置中的工作进程数;添加懒加载机制以优化模型和tokenizer的加载,确保线程安全
7c28043
import multiprocessing
# 监听地址和端口
bind = "0.0.0.0:7860"
# 修改工作进程数配置策略
# 对于CPU密集型应用,建议设置为 CPU核心数 + 1
workers = 3
# 每个工作进程的线程数
# 设置为2,增加并发处理能力
threads = 2
# 请求超时时间
timeout = 600
keepalive = 5 # keep-alive 连接等待时间,建议设置较小值
graceful_timeout = 30 # 优雅关闭超时时间,给进程2分钟清理资源
# 工作方式
worker_class = "uvicorn.workers.UvicornWorker"
# 提高每个工作进程的并发连接数
worker_connections = 2000
# 优化工作进程配置
#max_requests = 1000 # 工作进程处理多少个请求后自动重启
#max_requests_jitter = 50 # 添加随机重启偏差,避免同时重启
#graceful_timeout = 120 # 优雅重启超时时间
# keepalive超时设置
#keepalive = 5 # 保持连接超时时间
# 工作模式
worker_tmp_dir = "/dev/shm" # 使用内存文件系统提高性能
preload_app = False # 修改为 False,避免重复加载
# 添加新的配置
reload = False # 禁用自动重载
daemon = False # 非守护进程模式运行
# 添加应用初始化钩子
def when_ready(server):
# 当 Gunicorn 准备好时执行
server.log.info("Server is ready. Doing nothing.")
def post_fork(server, worker):
# 当 worker 进程被 fork 后执行
server.log.info(f"Worker spawned (pid: {worker.pid})")
# 进程名称前缀
proc_name = 'gunicorn_fastapi'
# 访问日志文件
accesslog = "access.log"
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
# 错误日志文件
errorlog = "error.log"
# 日志级别
loglevel = "info"