Skip to content
Snippets Groups Projects
gunicorn_conf.py 1.89 KiB
Newer Older
  • Learn to ignore specific revisions
  • import json
    import multiprocessing
    import os
    
    workers_per_core_str = os.getenv("WORKERS_PER_CORE", "1")
    max_workers_str = os.getenv("MAX_WORKERS")
    use_max_workers = None
    if max_workers_str:
        use_max_workers = int(max_workers_str)
    web_concurrency_str = os.getenv("WEB_CONCURRENCY", None)
    
    host = os.getenv("HOST", "0.0.0.0")
    port = os.getenv("PORT", "80")
    bind_env = os.getenv("BIND", None)
    use_loglevel = os.getenv("LOG_LEVEL", "info")
    if bind_env:
        use_bind = bind_env
    else:
        use_bind = f"{host}:{port}"
    
    cores = multiprocessing.cpu_count()
    workers_per_core = float(workers_per_core_str)
    default_web_concurrency = workers_per_core * cores
    if web_concurrency_str:
        web_concurrency = int(web_concurrency_str)
        assert web_concurrency > 0
    else:
        web_concurrency = max(int(default_web_concurrency), 2)
        if use_max_workers:
            web_concurrency = min(web_concurrency, use_max_workers)
    accesslog_var = os.getenv("ACCESS_LOG", "-")
    use_accesslog = accesslog_var or None
    errorlog_var = os.getenv("ERROR_LOG", "-")
    use_errorlog = errorlog_var or None
    graceful_timeout_str = os.getenv("GRACEFUL_TIMEOUT", "120")
    timeout_str = os.getenv("TIMEOUT", "120")
    keepalive_str = os.getenv("KEEP_ALIVE", "5")
    
    # Gunicorn config variables
    loglevel = use_loglevel
    workers = web_concurrency
    bind = use_bind
    errorlog = use_errorlog
    worker_tmp_dir = "/dev/shm"
    accesslog = use_accesslog
    graceful_timeout = int(graceful_timeout_str)
    timeout = int(timeout_str)
    keepalive = int(keepalive_str)
    
    
    # For debugging and testing
    log_data = {
        "loglevel": loglevel,
        "workers": workers,
        "bind": bind,
        "graceful_timeout": graceful_timeout,
        "timeout": timeout,
        "keepalive": keepalive,
        "errorlog": errorlog,
        "accesslog": accesslog,
        # Additional, non-gunicorn variables
        "workers_per_core": workers_per_core,
        "use_max_workers": use_max_workers,
        "host": host,
        "port": port,
    }
    print(json.dumps(log_data))