#!/usr/bin/env python3 """ Gunicorn配置文件 用于生产环境部署 """ import os import multiprocessing # 服务器配置 bind = "0.0.0.0:5002" workers = multiprocessing.cpu_count() * 2 + 1 worker_class = "sync" worker_connections = 1000 max_requests = 1000 max_requests_jitter = 100 # 超时配置 timeout = 120 # 增加超时时间到120秒,适应API调用 keepalive = 2 graceful_timeout = 60 # 增加优雅关闭时间 # 日志配置 accesslog = "logs/gunicorn_access.log" errorlog = "logs/gunicorn_error.log" loglevel = "info" access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(D)s' # 进程配置 preload_app = True daemon = False pidfile = "logs/gunicorn.pid" user = None group = None tmp_upload_dir = None # 安全配置 limit_request_line = 4094 limit_request_fields = 100 limit_request_field_size = 8190 # 环境变量 raw_env = [ "FLASK_ENV=production", ] # 钩子函数 def on_starting(server): """服务器启动时的钩子""" server.log.info("Gunicorn服务器启动中...") def on_reload(server): """重载时的钩子""" server.log.info("Gunicorn服务器重载中...") def worker_int(worker): """工作进程中断时的钩子""" worker.log.info("工作进程 %s 被中断", worker.pid) def pre_fork(server, worker): """fork工作进程前的钩子""" server.log.info("工作进程 %s 即将启动", worker.pid) def post_fork(server, worker): """fork工作进程后的钩子""" server.log.info("工作进程 %s 已启动", worker.pid) def post_worker_init(worker): """工作进程初始化后的钩子""" worker.log.info("工作进程 %s 初始化完成", worker.pid) def worker_abort(worker): """工作进程异常退出时的钩子""" worker.log.info("工作进程 %s 异常退出", worker.pid)