-
Notifications
You must be signed in to change notification settings - Fork 0
/
gunicorn_config.py
126 lines (84 loc) · 3.62 KB
/
gunicorn_config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import os
from psycogreen.gevent import patch_psycopg
# https://docs.gunicorn.org/en/stable/settings.html
port_number = 8000
bind = "0.0.0.0:{0}".format(port_number)
proc_name = "fyle_xero_api"
# The maximum number of pending connections.
backlog = int(os.environ.get("GUNICORN_BACKLOG", 2048))
# The number of worker processes for handling requests.
workers = int(os.environ.get("GUNICORN_NUMBER_WORKERS", 2))
# Workers silent for more than this many seconds are killed and restarted.
timeout = int(os.environ.get("GUNICORN_WORKER_TIMEOUT", 60))
# The number of seconds to wait for requests on a Keep-Alive connection.
keepalive = int(os.environ.get("GUNICORN_KEEPALIVE", 2))
# The maximum number of simultaneous clients.
worker_connections = int(os.environ.get("GUNICORN_WORKER_CONNECTIONS", 1000))
# The granularity of Error log outputs.
loglevel = os.environ.get("GUNICORN_LOG _LEVEL", "debug")
# The type of workers to use.
worker_class = os.environ.get("GUNICORN_WORKER_CLASS", "gevent")
# The number of worker threads for handling requests.
threads = int(os.environ.get("GUNICORN_NUMBER_WORKER_THREADS", 1))
# The maximum number of requests a worker will process before restarting.
max_requests = int(os.environ.get("GUNICORN_MAX_REQUESTS", 20))
# The jitter causes the restart per worker to be randomized by randint(0, max_requests_jitter).
max_requests_jitter = int(os.environ.get("GUNICORN_MAX_REQUESTS_JITTER", 20))
# Timeout for graceful workers restart.
graceful_timeout = int(os.environ.get("GUNICORN_WORKER_GRACEFUL_TIMEOUT", 5))
# Restart workers when code changes.
reload = True
# The maximum size of HTTP request line in bytes.
limit_request_line = 0
# Install a trace function that spews every line executed by the server.
spew = False
# Detaches the server from the controlling terminal and enters the background.
daemon = False
pidfile = None
umask = 0
user = None
group = None
tmp_upload_dir = None
errorlog = "-"
accesslog = "-"
access_log_format = '%({X-Real-IP}i)s - - - %(t)s "%(r)s" "%(f)s" "%(a)s" %({X-Request-Id}i)s %(L)s %(b)s %(s)s'
def post_fork(server, worker):
patch_psycopg()
server.log.info("Worker spawned (pid: %s)", worker.pid)
def pre_fork(server, worker): # noqa
pass
def pre_exec(server):
server.log.info("Forked child, re-executing.")
def when_ready(server):
server.log.info("Server is ready. Spawning workers")
def worker_int(worker):
worker.log.info("worker received INT or QUIT signal")
# get traceback info
import sys
import threading
import traceback
id2name = dict([(th.ident, th.name) for th in threading.enumerate()])
code = []
for thread_id, stack in sys._current_frames().items():
code.append("\n# Thread: %s(%d)" % (id2name.get(thread_id, ""), thread_id))
for filename, line_no, name, line in traceback.extract_stack(stack):
code.append('File: "%s", line %d, in %s' % (filename, line_no, name))
if line:
code.append(" %s" % (line.strip()))
worker.log.debug("\n".join(code))
def worker_abort(worker):
worker.log.info("worker received SIGABRT signal")
def child_exit(server, worker):
server.log.info("server: child_exit is called")
worker.log.info("worker: child_exit is called")
def worker_exit(server, worker):
server.log.info("server: worker_exit is called")
worker.log.info("worker: worker_exit is called")
def nworkers_changed(server, new_value, old_value):
server.log.info(
"server: nworkers_changed is called with new_value: %s old_value: %s",
new_value,
old_value,
)
def on_exit(server):
server.log.info("server: on_exit is called")