Commit 8bcfa02e authored by Julien Palard's avatar Julien Palard Committed by GitHub

bpo-31639: Use threads in http.server module. (GH-5018)

parent a0a42d22
...@@ -33,9 +33,16 @@ handler. Code to create and run the server looks like this:: ...@@ -33,9 +33,16 @@ handler. Code to create and run the server looks like this::
:attr:`server_port`. The server is accessible by the handler, typically :attr:`server_port`. The server is accessible by the handler, typically
through the handler's :attr:`server` instance variable. through the handler's :attr:`server` instance variable.
.. class:: ThreadedHTTPServer(server_address, RequestHandlerClass)
The :class:`HTTPServer` must be given a *RequestHandlerClass* on instantiation, This class is identical to HTTPServer but uses threads to handle
of which this module provides three different variants: requests by using the :class:`~socketserver.ThreadingMixin`. This
is usefull to handle web browsers pre-opening sockets, on which
:class:`HTTPServer` would wait indefinitly.
The :class:`HTTPServer` and :class:`ThreadedHTTPServer` must be given
a *RequestHandlerClass* on instantiation, of which this module
provides three different variants:
.. class:: BaseHTTPRequestHandler(request, client_address, server) .. class:: BaseHTTPRequestHandler(request, client_address, server)
......
...@@ -83,7 +83,7 @@ XXX To do: ...@@ -83,7 +83,7 @@ XXX To do:
__version__ = "0.6" __version__ = "0.6"
__all__ = [ __all__ = [
"HTTPServer", "BaseHTTPRequestHandler", "HTTPServer", "ThreadedHTTPServer", "BaseHTTPRequestHandler",
"SimpleHTTPRequestHandler", "CGIHTTPRequestHandler", "SimpleHTTPRequestHandler", "CGIHTTPRequestHandler",
] ]
...@@ -140,6 +140,10 @@ class HTTPServer(socketserver.TCPServer): ...@@ -140,6 +140,10 @@ class HTTPServer(socketserver.TCPServer):
self.server_port = port self.server_port = port
class ThreadedHTTPServer(socketserver.ThreadingMixIn, HTTPServer):
daemon_threads = True
class BaseHTTPRequestHandler(socketserver.StreamRequestHandler): class BaseHTTPRequestHandler(socketserver.StreamRequestHandler):
"""HTTP request handler base class. """HTTP request handler base class.
...@@ -1213,7 +1217,8 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): ...@@ -1213,7 +1217,8 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler):
def test(HandlerClass=BaseHTTPRequestHandler, def test(HandlerClass=BaseHTTPRequestHandler,
ServerClass=HTTPServer, protocol="HTTP/1.0", port=8000, bind=""): ServerClass=ThreadedHTTPServer,
protocol="HTTP/1.0", port=8000, bind=""):
"""Test the HTTP request handler class. """Test the HTTP request handler class.
This runs an HTTP server on port 8000 (or the port argument). This runs an HTTP server on port 8000 (or the port argument).
......
http.server now exposes a ThreadedHTTPServer class and uses it when the
module is invoked to cope with web browsers pre-opening sockets.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment