modify the way we handle murdered workers.

This commit is contained in:
Benoit Chesneau 2010-01-18 23:21:45 +01:00
parent 522933416c
commit bda2708def
2 changed files with 9 additions and 9 deletions

View File

@ -139,9 +139,12 @@ class Arbiter(object):
self.manage_workers()
while True:
try:
self.reap_workers()
sig = self.SIG_QUEUE.pop(0) if len(self.SIG_QUEUE) else None
if sig is None:
self.sleep()
self.murder_workers()
self.manage_workers()
continue
if sig not in self.SIG_NAMES:
@ -156,9 +159,8 @@ class Arbiter(object):
log.info("Handling signal: %s" % signame)
handler()
self.reap_workers()
self.murder_workers()
self.manage_workers()
except StopIteration:
break
except KeyboardInterrupt:
@ -255,8 +257,8 @@ class Arbiter(object):
def murder_workers(self):
for (pid, worker) in list(self.WORKERS.items()):
diff = time.time() - os.fstat(worker.tmp.fileno()).st_mtime
if diff < self.timeout:
diff = time.time() - os.fstat(worker.tmp.fileno()).st_ctime
if diff <= self.timeout:
continue
self.kill_worker(pid, signal.SIGKILL)

View File

@ -91,10 +91,10 @@ class Worker(object):
self.init_signals()
spinner = 0
while self.alive:
spinner = (spinner+1) % 2
self._fchmod(spinner)
while self.alive:
spinner = (spinner+1) % 2
self._fchmod(spinner)
try:
ret = select.select([self.socket], [], [], 2.0)
if ret[0]:
@ -139,5 +139,3 @@ class Worker(object):
self.log.exception("Error processing request. [%s]" % str(e))
msg = "HTTP/1.0 500 Internal Server Error\r\n\r\n"
util.close(client)
del client