]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch #550765: Add daemon_threads flag.
authorMartin v. Löwis <martin@v.loewis.de>
Fri, 22 Nov 2002 08:08:44 +0000 (08:08 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Fri, 22 Nov 2002 08:08:44 +0000 (08:08 +0000)
Doc/lib/libsocksvr.tex
Lib/SocketServer.py
Misc/NEWS

index 1e51cd6a1d354dbd15838a56d8bb2d9181b97f57..c51b6647c7dac762176f7f7d3cc97635525a0ebc 100644 (file)
@@ -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:
 
index e1d5ecbd6b7233d2e70df374563c70fab078cf3e..1928ad2c048773c96dba085294c9e0c514088fa9 100644 (file)
@@ -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()
 
 
index 9fcd57ea4791507b9bf9a09706ac79c98e9af473..42cd9183365c07eb12736e3d130488dcc72e6185 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.