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

This commit is contained in:
Julien Palard 2018-03-23 17:40:33 +01:00 committed by GitHub
parent a0a42d22d8
commit 8bcfa02e4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 4 deletions

View File

@ -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)

View File

@ -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):
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):
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).

View File

@ -0,0 +1,2 @@
http.server now exposes a ThreadedHTTPServer class and uses it when the
module is invoked to cope with web browsers pre-opening sockets.