mirror of
https://github.com/HKUDS/LightRAG.git
synced 2025-07-04 15:41:03 +00:00
80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
![]() |
# gunicorn_config.py
|
||
|
import os
|
||
|
import multiprocessing
|
||
|
from lightrag.kg.shared_storage import finalize_share_data
|
||
|
from lightrag.api.utils_api import parse_args
|
||
|
|
||
|
# Parse command line arguments
|
||
|
args = parse_args()
|
||
|
|
||
|
# Determine worker count - from environment variable or command line arguments
|
||
|
workers = int(os.getenv('WORKERS', args.workers))
|
||
|
|
||
|
# If not specified, use CPU count * 2 + 1 (Gunicorn recommended configuration)
|
||
|
if workers <= 1:
|
||
|
workers = multiprocessing.cpu_count() * 2 + 1
|
||
|
|
||
|
# Binding address
|
||
|
bind = f"{os.getenv('HOST', args.host)}:{os.getenv('PORT', args.port)}"
|
||
|
|
||
|
# Enable preload_app option
|
||
|
preload_app = True
|
||
|
|
||
|
# Use Uvicorn worker
|
||
|
worker_class = "uvicorn.workers.UvicornWorker"
|
||
|
|
||
|
# Other Gunicorn configurations
|
||
|
timeout = int(os.getenv('TIMEOUT', 120))
|
||
|
keepalive = 5
|
||
|
|
||
|
# Optional SSL configuration
|
||
|
if args.ssl:
|
||
|
certfile = args.ssl_certfile
|
||
|
keyfile = args.ssl_keyfile
|
||
|
|
||
|
# Logging configuration
|
||
|
errorlog = os.getenv('ERROR_LOG', '-') # '-' means stderr
|
||
|
accesslog = os.getenv('ACCESS_LOG', '-') # '-' means stderr
|
||
|
loglevel = os.getenv('LOG_LEVEL', 'info')
|
||
|
|
||
|
def on_starting(server):
|
||
|
"""
|
||
|
Executed when Gunicorn starts, before forking the first worker processes
|
||
|
You can use this function to do more initialization tasks for all processes
|
||
|
"""
|
||
|
print("=" * 80)
|
||
|
print(f"GUNICORN MASTER PROCESS: on_starting jobs for all {workers} workers")
|
||
|
print(f"Process ID: {os.getpid()}")
|
||
|
print("=" * 80)
|
||
|
|
||
|
# Memory usage monitoring
|
||
|
try:
|
||
|
import psutil
|
||
|
process = psutil.Process(os.getpid())
|
||
|
memory_info = process.memory_info()
|
||
|
msg = f"Memory usage after initialization: {memory_info.rss / 1024 / 1024:.2f} MB"
|
||
|
print(msg)
|
||
|
except ImportError:
|
||
|
print("psutil not installed, skipping memory usage reporting")
|
||
|
|
||
|
print("=" * 80)
|
||
|
print("Gunicorn initialization complete, forking workers...")
|
||
|
print("=" * 80)
|
||
|
|
||
|
def on_exit(server):
|
||
|
"""
|
||
|
Executed when Gunicorn is shutting down.
|
||
|
This is a good place to release shared resources.
|
||
|
"""
|
||
|
print("=" * 80)
|
||
|
print("GUNICORN MASTER PROCESS: Shutting down")
|
||
|
print(f"Process ID: {os.getpid()}")
|
||
|
print("=" * 80)
|
||
|
|
||
|
# Release shared resources
|
||
|
finalize_share_data()
|
||
|
|
||
|
print("=" * 80)
|
||
|
print("Gunicorn shutdown complete")
|
||
|
print("=" * 80)
|