mirror of https://github.com/python/cpython
bpo-31639: Use threads in http.server module. (GH-5018)
This commit is contained in:
parent
a0a42d22d8
commit
8bcfa02e4b
|
@ -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:
|
||||||
__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).
|
||||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue