Skip to content

Commit f35ecdf

Browse files
authored
Merge pull request #1862 from GSA/try_gevent
try gevent
2 parents f3e447f + 143d574 commit f35ecdf

File tree

8 files changed

+155
-99
lines changed

8 files changed

+155
-99
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ run-celery: ## Run celery, TODO remove purge for staging/prod
7070
-A run_celery.notify_celery worker \
7171
--pidfile="/tmp/celery.pid" \
7272
--loglevel=INFO \
73-
--pool=eventlet
73+
--pool=gevent
7474
--concurrency=20
7575

7676

app/aws/s3.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from io import StringIO
66

77
import botocore
8-
import eventlet
8+
import gevent
99
from boto3 import Session
1010
from flask import current_app
1111

@@ -250,7 +250,7 @@ def get_s3_files():
250250
for object_key in object_keys:
251251
read_s3_file(bucket_name, object_key, s3res)
252252
count = count + 1
253-
eventlet.sleep(0.2)
253+
gevent.sleep(0.2)
254254
except Exception:
255255
current_app.logger.exception(
256256
f"Trouble reading {object_key} which is # {count} during cache regeneration"
@@ -411,7 +411,7 @@ def get_job_from_s3(service_id, job_id):
411411
)
412412
retries += 1
413413
sleep_time = backoff_factor * (2**retries) # Exponential backoff
414-
eventlet.sleep(sleep_time)
414+
gevent.sleep(sleep_time)
415415
continue
416416
else:
417417
# Typically this is "NoSuchKey"

app/celery/tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22

3-
import eventlet
3+
import gevent
44
from celery.signals import task_postrun
55
from flask import current_app
66
from requests import HTTPError, RequestException, request
@@ -84,7 +84,7 @@ def process_job(job_id, sender_id=None):
8484
process_row(row, template, job, service, sender_id=sender_id)
8585
count = count + 1
8686
if count % 3 == 0:
87-
eventlet.sleep(1)
87+
gevent.sleep(1)
8888

8989
# End point/Exit point for message send flow.
9090
job_complete(job, start=start)

app/clients/cloudwatch/aws_cloudwatch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def event_to_db_format(self, event):
151151
# result = temp_client.get_query_results(queryId=query_id)
152152
# if result['status'] == 'Complete':
153153
# break
154-
# eventlet.sleep(1)
154+
# gevent.sleep(1)
155155

156156
# delivery_receipts = []
157157
# for log in result['results']:

gunicorn_config.py

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
import eventlet
1+
from gevent import monkey
22

3-
eventlet.monkey_patch() # this has to be called before other imports or monkey patching doesn't happen
3+
monkey.patch_all() # this has to be called before other imports or monkey patching doesn't happen
44

55
import os # noqa
66
import socket # noqa
77
import sys # noqa
88
import traceback # noqa
99

10-
import eventlet.debug as debug # noqa
1110
import gunicorn # noqa
1211

13-
# This will give us a better stack trace if blocking occurs (if True)
14-
debug.hub_blocking_detection(False)
12+
# This will give us a better stack trace if
1513
workers = 4
16-
worker_class = "eventlet"
14+
worker_class = "gevent"
1715
worker_connections = 256
1816
bind = "0.0.0.0:{}".format(os.getenv("PORT"))
1917
statsd_host = "{}:8125".format(os.getenv("STATSD_HOST"))
@@ -36,22 +34,3 @@ def on_exit(server):
3634

3735
def worker_int(worker):
3836
worker.log.info("worker: received SIGINT {}".format(worker.pid))
39-
40-
41-
def fix_ssl_monkeypatching():
42-
"""
43-
eventlet works by monkey-patching core IO libraries (such as ssl) to be non-blocking. However, there's currently
44-
a bug: In the normal socket library it may throw a timeout error as a `socket.timeout` exception. However
45-
eventlet.green.ssl's patch raises an ssl.SSLError('timed out',) instead. redispy handles socket.timeout but not
46-
ssl.SSLError, so we solve this by monkey patching the monkey patching code to raise the correct exception type
47-
:scream:
48-
49-
https://github.com/eventlet/eventlet/issues/692
50-
"""
51-
# this has probably already been called somewhere in gunicorn internals, however, to be sure, we invoke it again.
52-
# eventlet.monkey_patch can be called multiple times without issue
53-
eventlet.monkey_patch()
54-
eventlet.green.ssl.timeout_exc = socket.timeout
55-
56-
57-
fix_ssl_monkeypatching()

manifest.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ applications:
2626
- type: worker
2727
instances: ((worker_instances))
2828
memory: ((worker_memory))
29-
command: newrelic-admin run-program celery -A run_celery.notify_celery worker --loglevel=INFO --pool=eventlet --concurrency=20 --prefetch-multiplier=2
29+
command: newrelic-admin run-program celery -A run_celery.notify_celery worker --loglevel=INFO --pool=gevent --concurrency=20 --prefetch-multiplier=2
3030
- type: scheduler
3131
instances: 1
3232
memory: ((scheduler_memory))

poetry.lock

Lines changed: 141 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ click-didyoumean = "==0.3.1"
2525
click-plugins = "==1.1.1.2"
2626
click-repl = "==0.3.0"
2727
deprecated = "==1.2.18"
28-
eventlet = "==0.40.2"
28+
gevent = "==25.5.1"
2929
expiringdict = "==1.2.2"
3030
flask = "~=3.1"
3131
flask-bcrypt = "==1.0.1"
3232
flask-migrate = "==4.1.0"
3333
flask-redis = "==0.4.0"
3434
flask-sqlalchemy = "^3.1.1"
35-
gunicorn = {version = "==23.0.0", extras = ["eventlet"]}
35+
gunicorn = {version = "==23.0.0", extras = ["gevent"]}
3636
iso8601 = "==2.1.0"
3737
jsonschema = {version = "==4.25.0", extras = ["format"]}
3838
lxml = "==6.0.0"

0 commit comments

Comments
 (0)