8000 Change default HTTP Server to WSGI Server · prometheus/client_python@4f1d836 · GitHub
Skip to content

Commit 4f1d836

Browse files
committed
Change default HTTP Server to WSGI Server
Signed-off-by: Emil Madsen <sovende@gmail.com>
1 parent b48346d commit 4f1d836

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

prometheus_client/exposition.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import socket
77
import sys
88
import threading
9-
from wsgiref.simple_server import make_server, WSGIRequestHandler
9+
from wsgiref.simple_server import make_server, WSGIServer, WSGIRequestHandler
1010

1111
from .openmetrics import exposition as openmetrics
1212
from .registry import REGISTRY
@@ -64,15 +64,26 @@ def log_message(self, format, *args):
6464
"""Log nothing."""
6565

6666

67+
class ThreadingWSGIServer(ThreadingMixIn, WSGIServer):
68+
"""Thread per request HTTP server."""
69+
# Make worker threads "fire and forget". Beginning with Python 3.7 this
70+
# prevents a memory leak because ``ThreadingMixIn`` starts to gather all
71+
# non-daemon threads in a list in order to join on them at server close.
72+
daemon_threads = True
73+
74+
6775
def start_wsgi_server(port, addr='', registry=REGISTRY):
6876
"""Starts a WSGI server for prometheus metrics as a daemon thread."""
6977
app = make_wsgi_app(registry)
70-
httpd = make_server(addr, port, app, handler_class=_SilentHandler)
78+
httpd = make_server(addr, port, app, ThreadingWSGIServer, handler_class=_SilentHandler)
7179
t = threading.Thread(target=httpd.serve_forever)
7280
t.daemon = True
7381
t.start()
7482

7583

84+
start_http_server = start_wsgi_server
85+
86+
7687
def generate_latest(registry=REGISTRY):
7788
"""Returns the metrics from the registry in latest text format as a string."""
7889

@@ -181,25 +192,6 @@ def factory(cls, registry):
181192
return MyMetricsHandler
182193

183194

184-
class _ThreadingSimpleServer(ThreadingMixIn, HTTPServer):
185-
"""Thread per request HTTP server."""
186-
# Make worker threads "fire and forget". Beginning with Python 3.7 this
187-
# prevents a memory leak because ``ThreadingMixIn`` starts to gather all
188-
# non-daemon threads in a list in order to join on them at server close.
189-
# Enabling daemon threads virtually makes ``_ThreadingSimpleServer`` the
190-
# same as Python 3.7's ``ThreadingHTTPServer``.
191-
daemon_threads = True
192-
193-
194-
def start_http_server(port, addr='', registry=REGISTRY):
195-
"""Starts an HTTP server for prometheus metrics as a daemon thread"""
196-
CustomMetricsHandler = MetricsHandler.factory(registry)
197-
httpd = _ThreadingSimpleServer((addr, port), CustomMetricsHandler)
198-
t = threading.Thread(target=httpd.serve_forever)
199-
t.daemon = True
200-
t.start()
201-
202-
203195
def write_to_textfile(path, registry):
204196
"""Write metrics to the given path.
205197

0 commit comments

Comments
 (0)
0