Files
IT_Ticket_System/gunicorn.conf.py
T

53 lines
1.7 KiB
Python

# gunicorn.conf.py
# Server socket
bind = "127.0.0.1:7000" # match your nginx proxy_pass port
backlog = 2048
# Worker — eventlet requires exactly 1 worker process.
# Concurrency is handled by eventlet's cooperative green-thread pool.
worker_class = "eventlet"
workers = 1
worker_connections= 2000
timeout = 300
keepalive = 75
# Preloading ensures eventlet.monkey_patch() in run.py runs once before fork
preload_app = True
# Application
wsgi_app = "run:app"
# Logging
accesslog = "logs/gunicorn_access.log"
errorlog = "logs/gunicorn_error.log"
loglevel = "warning" # suppress routine socket close noise
capture_output = False # don't capture eventlet's stderr Errno 9 messages
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(a)s" %(D)sµs'
# Process naming
proc_name = "it_ticket_system"
daemon = False
pidfile = "/tmp/it_tickets.pid"
def post_fork(server, worker):
"""Called after a worker is forked. Patch eventlet per-worker."""
import eventlet
eventlet.monkey_patch()
def worker_exit(server, worker):
"""
Called when a worker exits. Cleanly close any remaining eventlet sockets
to prevent [Errno 9] Bad file descriptor errors in the logs.
These errors are benign (connections recover automatically) but noisy.
"""
try:
import eventlet.greenio
# Hub cleanup — tells eventlet to stop watching all open file descriptors
hub = eventlet.hubs.get_hub()
if hasattr(hub, 'abort'):
hub.abort(wait=False)
except Exception:
pass