summaryrefslogtreecommitdiff
path: root/Lib/SocketServer.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-07-28 21:39:28 +0000
committerGuido van Rossum <guido@python.org>1999-07-28 21:39:28 +0000
commit1a0d0f66800d4e5ad8d212d2d158704168bdf9f9 (patch)
tree0e7210a7d1483a2b79a2b285b0c41118cb3a99ab /Lib/SocketServer.py
parent413712ccfcdff5b23f956ee2680ed3374a5aad66 (diff)
downloadcpython-1a0d0f66800d4e5ad8d212d2d158704168bdf9f9.tar.gz
Another patch from Andy Dustman:
""" Here's a patch for the ForkingMixIn which will prevent the server from forking itself into the ground. Note: I've tested a very similar patch (subclassed ForkingMixIn) but not actually tested this one. As you might surmise, this was done out of necessity... If the maximum number of children are already running, block while waiting for a child to exit. """ (I added that last sentence as a comment to the code --GvR.)
Diffstat (limited to 'Lib/SocketServer.py')
-rw-r--r--Lib/SocketServer.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py
index 82bc8fb7a2..f7da84f557 100644
--- a/Lib/SocketServer.py
+++ b/Lib/SocketServer.py
@@ -281,12 +281,19 @@ class ForkingMixIn:
"""Mix-in class to handle each request in a new process."""
active_children = None
+ max_children = 40
def collect_children(self):
"""Internal routine to wait for died children."""
while self.active_children:
+ if len(self.active_children) < self.max_children:
+ options = os.WNOHANG
+ else:
+ # If the maximum number of children are already
+ # running, block while waiting for a child to exit
+ options = 0
try:
- pid, status = os.waitpid(0, os.WNOHANG)
+ pid, status = os.waitpid(0, options)
except os.error:
pid = None
if not pid: break