Patch #550765: Add daemon_threads flag.
This commit is contained in:
parent
e0273de432
commit
f86e8ef33e
|
@ -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
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
BaseRequestHandler and redefine its handle() method. You can then run
|
||||
|
@ -448,6 +449,10 @@ class ForkingMixIn:
|
|||
class ThreadingMixIn:
|
||||
"""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):
|
||||
"""Same as in BaseServer but as a thread.
|
||||
|
||||
|
@ -466,6 +471,8 @@ class ThreadingMixIn:
|
|||
import threading
|
||||
t = threading.Thread(target = self.process_request_thread,
|
||||
args = (request, client_address))
|
||||
if self.daemon_threads:
|
||||
t.setDaemon (1)
|
||||
t.start()
|
||||
|
||||
|
||||
|
|
|
@ -389,6 +389,12 @@ Extension modules
|
|||
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
|
||||
command line parsing. It is a slightly modified version of Greg
|
||||
Ward's Optik package.
|
||||
|
|
Loading…
Reference in New Issue