summaryrefslogtreecommitdiff
path: root/paste/httpserver.py
diff options
context:
space:
mode:
authorianb <devnull@localhost>2007-03-29 18:24:45 +0000
committerianb <devnull@localhost>2007-03-29 18:24:45 +0000
commit959b153edf2cb48b88f5fc39cf61d6dd5ed0d4aa (patch)
treee04dde1949e810155d2217f46056907bd03c4476 /paste/httpserver.py
parent859368c18f817bc55b57ac0539970ea8964c4a34 (diff)
downloadpaste-959b153edf2cb48b88f5fc39cf61d6dd5ed0d4aa.tar.gz
Fixed logic error where we'd spawn extra workers, then immediately cull them. Now we wait a little while after spawning workers to cull them
Diffstat (limited to 'paste/httpserver.py')
-rwxr-xr-xpaste/httpserver.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/paste/httpserver.py b/paste/httpserver.py
index 61298a2..48945db 100755
--- a/paste/httpserver.py
+++ b/paste/httpserver.py
@@ -581,6 +581,10 @@ class ThreadPool(object):
self.idle_workers = []
# Used to keep track of threads that have been killed, but maybe aren't dead yet:
self.dying_threads = {}
+ # This is used to track when we last had to add idle workers;
+ # we shouldn't cull extra workers until some time has passed
+ # (hung_thread_limit) since workers were added:
+ self._last_added_new_idle_workers = 0
for i in range(self.nworkers):
self.add_worker_thread()
@@ -612,6 +616,7 @@ class ThreadPool(object):
self.logger.info(
'No idle tasks, and only %s busy tasks; adding %s more '
'workers', busy, self.spawn_if_under-busy)
+ self._last_added_new_idle_workers = time.time()
for i in range(self.spawn_if_under - busy):
self.add_worker_thread()
else:
@@ -619,7 +624,8 @@ class ThreadPool(object):
'No extra workers needed (%s busy workers)',
busy)
if (len(self.workers) > self.nworkers
- and len(self.idle_workers) > 3):
+ and len(self.idle_workers) > 3
+ and time.time()-self._last_added_new_idle_workers > self.hung_thread_limit):
# We've spawned worers in the past, but they aren't needed
# anymore; kill off some
self.logger.info(