From 40254ec4d168b7df3c07207577c07735ab28579f Mon Sep 17 00:00:00 2001 From: James Sewell Date: Mon, 13 Feb 2017 13:59:00 +1100 Subject: [PATCH 1/3] Changes to allow each HTTP request to be a seperate thread, stopping blocking --- prometheus_client/exposition.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/prometheus_client/exposition.py b/prometheus_client/exposition.py index c687a094..d8c9c025 100644 --- a/prometheus_client/exposition.py +++ b/prometheus_client/exposition.py @@ -12,8 +12,8 @@ from . import core try: - from BaseHTTPServer import BaseHTTPRequestHandler - from BaseHTTPServer import HTTPServer + from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer + from SocketServer import ThreadingMixIn from urllib2 import build_opener, Request, HTTPHandler from urllib import quote_plus from urlparse import parse_qs, urlparse @@ -97,10 +97,13 @@ def log_message(self, format, *args): def start_http_server(port, addr=''): - """Starts a HTTP server for prometheus metrics as a daemon thread.""" + """Spawns each HTTPServer in a new thread to prevent blocking""" + class ThreadingSimpleServer(ThreadingMixIn, HTTPServer): + pass + """Starts a HTTP server for prometheus metrics in a new thread""" class PrometheusMetricsServer(threading.Thread): def run(self): - httpd = HTTPServer((addr, port), MetricsHandler) + httpd = ThreadingSimpleServer((addr, port), MetricsHandler) httpd.serve_forever() t = PrometheusMetricsServer() t.daemon = True From 7bc5d7683ab89574992a2f1fd7fbf0d85f129bd7 Mon Sep 17 00:00:00 2001 From: jamessewell Date: Mon, 13 Feb 2017 23:45:39 +1100 Subject: [PATCH 2/3] Update exposition.py --- prometheus_client/exposition.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/prometheus_client/exposition.py b/prometheus_client/exposition.py index d8c9c025..f6ee6934 100644 --- a/prometheus_client/exposition.py +++ b/prometheus_client/exposition.py @@ -13,15 +13,15 @@ from . import core try: from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer - from SocketServer import ThreadingMixIn + from SocketServer import ThreadingMixIn from urllib2 import build_opener, Request, HTTPHandler from urllib import quote_plus from urlparse import parse_qs, urlparse except ImportError: # Python 3 unicode = str - from http.server import BaseHTTPRequestHandler - from http.server import HTTPServer + from http.server import BaseHTTPRequestHandler, HTTPServer + from socketserver import ThreadingMixIn from urllib.request import build_opener, Request, HTTPHandler from urllib.parse import quote_plus, parse_qs, urlparse @@ -97,10 +97,10 @@ def log_message(self, format, *args): def start_http_server(port, addr=''): - """Spawns each HTTPServer in a new thread to prevent blocking""" + """Spawns each HTTPServer in a new thread to prevent blocking.""" class ThreadingSimpleServer(ThreadingMixIn, HTTPServer): pass - """Starts a HTTP server for prometheus metrics in a new thread""" + """Starts a HTTP server for prometheus metrics as a daemon thread.""" class PrometheusMetricsServer(threading.Thread): def run(self): httpd = ThreadingSimpleServer((addr, port), MetricsHandler) From e015308c75e0881d4155b9b6e77f12b8f7761e57 Mon Sep 17 00:00:00 2001 From: jamessewell Date: Wed, 15 Feb 2017 00:07:05 +1100 Subject: [PATCH 3/3] Change comment on sstart_http_server --- prometheus_client/exposition.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/prometheus_client/exposition.py b/prometheus_client/exposition.py index f6ee6934..fe859d7b 100644 --- a/prometheus_client/exposition.py +++ b/prometheus_client/exposition.py @@ -97,10 +97,9 @@ def log_message(self, format, *args): def start_http_server(port, addr=''): - """Spawns each HTTPServer in a new thread to prevent blocking.""" + """Starts an HTTP server for prometheus metrics as a daemon thread""" class ThreadingSimpleServer(ThreadingMixIn, HTTPServer): pass - """Starts a HTTP server for prometheus metrics as a daemon thread.""" class PrometheusMetricsServer(threading.Thread): def run(self): httpd = ThreadingSimpleServer((addr, port), MetricsHandler)