1
+ # copied from https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/master/docker-images/gunicorn_conf.py August 24, 2021
2
+ import json
3
+ import multiprocessing
4
+ import os
5
+
6
+ workers_per_core_str = os .getenv ("WORKERS_PER_CORE" , "1" )
7
+ max_workers_str = os .getenv ("MAX_WORKERS" )
8
+ use_max_workers = None
9
+ if max_workers_str :
10
+ use_max_workers = int (max_workers_str )
11
+ web_concurrency_str = os .getenv ("WEB_CONCURRENCY" , None )
12
+
13
+ host = os .getenv ("HOST" , "0.0.0.0" )
14
+ port = os .getenv ("PORT" , "80" )
15
+ bind_env = os .getenv ("BIND" , None )
16
+ use_loglevel = os .getenv ("LOG_LEVEL" , "info" )
17
+ if bind_env :
18
+ use_bind = bind_env
19
+ else :
20
+ use_bind = f"{ host } :{ port } "
21
+
22
+ cores = multiprocessing .cpu_count ()
23
+ workers_per_core = float (workers_per_core_str )
24
+ default_web_concurrency = workers_per_core * cores
25
+ if web_concurrency_str :
26
+ web_concurrency = int (web_concurrency_str )
27
+ assert web_concurrency > 0
28
+ else :
29
+ web_concurrency = max (int (default_web_concurrency ), 2 )
30
+ if use_max_workers :
31
+ web_concurrency = min (web_concurrency , use_max_workers )
32
+ accesslog_var = os .getenv ("ACCESS_LOG" , "-" )
33
+ use_accesslog = accesslog_var or None
34
+ errorlog_var = os .getenv ("ERROR_LOG" , "-" )
35
+ use_errorlog = errorlog_var or None
36
+ graceful_timeout_str = os .getenv ("GRACEFUL_TIMEOUT" , "120" )
37
+ timeout_str = os .getenv ("TIMEOUT" , "120" )
38
+ keepalive_str = os .getenv ("KEEP_ALIVE" , "5" )
39
+
40
+ # Gunicorn config variables
41
+ loglevel = use_loglevel
42
+ workers = web_concurrency
43
+ bind = use_bind
44
+ errorlog = use_errorlog
45
+ worker_tmp_dir = "/dev/shm"
46
+ accesslog = use_accesslog
47
+ graceful_timeout = int (graceful_timeout_str )
48
+ timeout = int (timeout_str )
49
+ keepalive = int (keepalive_str )
50
+
51
+
52
+ # For debugging and testing
53
+ log_data = {
54
+ "loglevel" : loglevel ,
55
+ "workers" : workers ,
56
+ "bind" : bind ,
57
+ "graceful_timeout" : graceful_timeout ,
58
+ "timeout" : timeout ,
59
+ "keepalive" : keepalive ,
60
+ "errorlog" : errorlog ,
61
+ "accesslog" : accesslog ,
62
+ # Additional, non-gunicorn variables
63
+ "workers_per_core" : workers_per_core ,
64
+ "use_max_workers" : use_max_workers ,
65
+ "host" : host ,
66
+ "port" : port ,
67
+ }
68
+ print (json .dumps (log_data ))
0 commit comments