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.)
This commit is contained in:
Guido van Rossum 1999-07-28 21:39:28 +00:00
parent ddc469679b
commit 2ab455a8fa

View file

@ -281,12 +281,19 @@ class ForkingMixIn:
"""Mix-in class to handle each request in a new process.""" """Mix-in class to handle each request in a new process."""
active_children = None active_children = None
max_children = 40
def collect_children(self): def collect_children(self):
"""Internal routine to wait for died children.""" """Internal routine to wait for died children."""
while self.active_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: try:
pid, status = os.waitpid(0, os.WNOHANG) pid, status = os.waitpid(0, options)
except os.error: except os.error:
pid = None pid = None
if not pid: break if not pid: break