mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Patch #550765: Add daemon_threads flag.
This commit is contained in:
parent
e0273de432
commit
f86e8ef33e
3 changed files with 22 additions and 1 deletions
|
@ -37,6 +37,14 @@ handler class. Finally, call the \method{handle_request()} or
|
||||||
\method{serve_forever()} method of the server object to process one or
|
\method{serve_forever()} method of the server object to process one or
|
||||||
many requests.
|
many requests.
|
||||||
|
|
||||||
|
When inheriting from \class{ThreadingMixIn} for threaded connection
|
||||||
|
behavior, you should explicitly declare how you want your threads
|
||||||
|
to behave on an abrupt shutdown. The \class{ThreadingMixIn} class
|
||||||
|
defines an attribute \var{daemon_threads}, which indicates whether
|
||||||
|
or not the server should wait for thread termination. You should
|
||||||
|
set the flag explicitly if you would like threads to behave
|
||||||
|
autonomously.
|
||||||
|
|
||||||
Server classes have the same external methods and attributes, no
|
Server classes have the same external methods and attributes, no
|
||||||
matter what network protocol they use:
|
matter what network protocol they use:
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,8 @@ instance, a threading UDP server class is created as follows:
|
||||||
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
|
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
|
||||||
|
|
||||||
The Mix-in class must come first, since it overrides a method defined
|
The Mix-in class must come first, since it overrides a method defined
|
||||||
in UDPServer!
|
in UDPServer! Setting the various member variables also changes
|
||||||
|
the behavior of the underlying server mechanism.
|
||||||
|
|
||||||
To implement a service, you must derive a class from
|
To implement a service, you must derive a class from
|
||||||
BaseRequestHandler and redefine its handle() method. You can then run
|
BaseRequestHandler and redefine its handle() method. You can then run
|
||||||
|
@ -448,6 +449,10 @@ class ForkingMixIn:
|
||||||
class ThreadingMixIn:
|
class ThreadingMixIn:
|
||||||
"""Mix-in class to handle each request in a new thread."""
|
"""Mix-in class to handle each request in a new thread."""
|
||||||
|
|
||||||
|
# Decides how threads will act upon termination of the
|
||||||
|
# main process
|
||||||
|
daemon_threads = 0
|
||||||
|
|
||||||
def process_request_thread(self, request, client_address):
|
def process_request_thread(self, request, client_address):
|
||||||
"""Same as in BaseServer but as a thread.
|
"""Same as in BaseServer but as a thread.
|
||||||
|
|
||||||
|
@ -466,6 +471,8 @@ class ThreadingMixIn:
|
||||||
import threading
|
import threading
|
||||||
t = threading.Thread(target = self.process_request_thread,
|
t = threading.Thread(target = self.process_request_thread,
|
||||||
args = (request, client_address))
|
args = (request, client_address))
|
||||||
|
if self.daemon_threads:
|
||||||
|
t.setDaemon (1)
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -389,6 +389,12 @@ Extension modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- When cancelling a server that implemented threading with a keyboard
|
||||||
|
interrupt, the server would shut down but not terminate (waiting on
|
||||||
|
client threads). A new member variable, daemon_threads, was added to
|
||||||
|
the ThreadingMixIn class in SocketServer.py to make it explicit that
|
||||||
|
this behavior needs to be controlled.
|
||||||
|
|
||||||
- A new module, optparse, provides a fancy alternative to getopt for
|
- A new module, optparse, provides a fancy alternative to getopt for
|
||||||
command line parsing. It is a slightly modified version of Greg
|
command line parsing. It is a slightly modified version of Greg
|
||||||
Ward's Optik package.
|
Ward's Optik package.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue