-
Notifications
You must be signed in to change notification settings - Fork 0
/
gunicorn.py
52 lines (42 loc) · 1.83 KB
/
gunicorn.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
# Copyright (c) 2019, Novo Nordisk Foundation Center for Biosustainability,
# Technical University of Denmark.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Configure the gunicorn server."""
import os
import gevent.monkey
# Ensure gevent is monkeypatched before ssl is imported (gunicorn does this too
# late). This is only necessary when `preload_app` is True. The gevent warning
# is still printed, but testing shows that recursion errors do not occur (eg. on
# use of `requests`) when monkey-patching here.
# See also https://github.com/gevent/gevent/issues/1016 and
# https://github.com/benoitc/gunicorn/issues/1566
gevent.monkey.patch_all()
_config = os.environ["ENVIRONMENT"]
bind = "0.0.0.0:8000"
worker_class = "gevent"
timeout = 20
accesslog = "-"
access_log_format = '''%(t)s "%(r)s" %(s)s %(b)s %(L)s "%(f)s"'''
if _config == "production":
# Our resource policy is that each web service is granted at least a single
# vCPU when available. The number of workers is then a guess that having two
# workers I/O bound and a third processing a request will utilize available
# resources well, but that guess needs to be tested and benchmarked.
workers = 3
preload_app = True
else:
# FIXME: The number of workers is up for debate. At least for testing more
# than one worker could make sense.
workers = 1
reload = True