From 51a9dfdfd286606dfc1fef0978fcc3f6f3eb6880 Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Wed, 12 Jun 2024 13:42:04 -0700 Subject: [PATCH] update gunicorn config --- gunicorn_config.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/gunicorn_config.py b/gunicorn_config.py index d13af3b42..4f928a467 100644 --- a/gunicorn_config.py +++ b/gunicorn_config.py @@ -1,12 +1,11 @@ import os -import socket import sys import traceback - -import eventlet +import multiprocessing import gunicorn -workers = 5 +# Let gunicorn figure out the right number of workers +workers = multiprocessing.cpu_count() * 2 + 1 worker_class = "eventlet" bind = "0.0.0.0:{}".format(os.getenv("PORT")) disable_redirect_access_to_syslog = True @@ -19,19 +18,21 @@ def worker_abort(worker): worker.log.error("".join(traceback.format_stack(stack))) -def fix_ssl_monkeypatching(): - """ - eventlet works by monkey-patching core IO libraries (such as ssl) to be non-blocking. However, there's currently - a bug: In the normal socket library it may throw a timeout error as a `socket.timeout` exception. However - eventlet.green.ssl's patch raises an ssl.SSLError('timed out',) instead. redispy handles socket.timeout but not - ssl.SSLError, so we solve this by monkey patching the monkey patching code to raise the correct exception type - :scream: - https://github.com/eventlet/eventlet/issues/692 - """ - # this has probably already been called somewhere in gunicorn internals, however, to be sure, we invoke it again. - # eventlet.monkey_patch can be called multiple times without issue - eventlet.monkey_patch() - eventlet.green.ssl.timeout_exc = socket.timeout +# This issue is fixed in the 22.0.0 release, which we are using +# See github issue for details +# def fix_ssl_monkeypatching(): +# """ +# eventlet works by monkey-patching core IO libraries (such as ssl) to be non-blocking. However, there's currently +# a bug: In the normal socket library it may throw a timeout error as a `socket.timeout` exception. However +# eventlet.green.ssl's patch raises an ssl.SSLError('timed out',) instead. redispy handles socket.timeout but not +# ssl.SSLError, so we solve this by monkey patching the monkey patching code to raise the correct exception type +# :scream: +# https://github.com/eventlet/eventlet/issues/692 +# """ +# # this has probably already been called somewhere in gunicorn internals, however, to be sure, we invoke it again. +# # eventlet.monkey_patch can be called multiple times without issue +# eventlet.monkey_patch() +# eventlet.green.ssl.timeout_exc = socket.timeout -fix_ssl_monkeypatching() +# fix_ssl_monkeypatching()