mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
modify the way we handle murdered workers.
This commit is contained in:
parent
522933416c
commit
bda2708def
@ -139,9 +139,12 @@ class Arbiter(object):
|
|||||||
self.manage_workers()
|
self.manage_workers()
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
self.reap_workers()
|
||||||
sig = self.SIG_QUEUE.pop(0) if len(self.SIG_QUEUE) else None
|
sig = self.SIG_QUEUE.pop(0) if len(self.SIG_QUEUE) else None
|
||||||
if sig is None:
|
if sig is None:
|
||||||
self.sleep()
|
self.sleep()
|
||||||
|
self.murder_workers()
|
||||||
|
self.manage_workers()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if sig not in self.SIG_NAMES:
|
if sig not in self.SIG_NAMES:
|
||||||
@ -156,9 +159,8 @@ class Arbiter(object):
|
|||||||
log.info("Handling signal: %s" % signame)
|
log.info("Handling signal: %s" % signame)
|
||||||
handler()
|
handler()
|
||||||
|
|
||||||
self.reap_workers()
|
|
||||||
self.murder_workers()
|
|
||||||
self.manage_workers()
|
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
break
|
break
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
@ -255,8 +257,8 @@ class Arbiter(object):
|
|||||||
|
|
||||||
def murder_workers(self):
|
def murder_workers(self):
|
||||||
for (pid, worker) in list(self.WORKERS.items()):
|
for (pid, worker) in list(self.WORKERS.items()):
|
||||||
diff = time.time() - os.fstat(worker.tmp.fileno()).st_mtime
|
diff = time.time() - os.fstat(worker.tmp.fileno()).st_ctime
|
||||||
if diff < self.timeout:
|
if diff <= self.timeout:
|
||||||
continue
|
continue
|
||||||
self.kill_worker(pid, signal.SIGKILL)
|
self.kill_worker(pid, signal.SIGKILL)
|
||||||
|
|
||||||
|
|||||||
@ -91,10 +91,10 @@ class Worker(object):
|
|||||||
self.init_signals()
|
self.init_signals()
|
||||||
spinner = 0
|
spinner = 0
|
||||||
while self.alive:
|
while self.alive:
|
||||||
spinner = (spinner+1) % 2
|
|
||||||
self._fchmod(spinner)
|
|
||||||
|
|
||||||
while self.alive:
|
while self.alive:
|
||||||
|
spinner = (spinner+1) % 2
|
||||||
|
self._fchmod(spinner)
|
||||||
try:
|
try:
|
||||||
ret = select.select([self.socket], [], [], 2.0)
|
ret = select.select([self.socket], [], [], 2.0)
|
||||||
if ret[0]:
|
if ret[0]:
|
||||||
@ -139,5 +139,3 @@ class Worker(object):
|
|||||||
self.log.exception("Error processing request. [%s]" % str(e))
|
self.log.exception("Error processing request. [%s]" % str(e))
|
||||||
msg = "HTTP/1.0 500 Internal Server Error\r\n\r\n"
|
msg = "HTTP/1.0 500 Internal Server Error\r\n\r\n"
|
||||||
util.close(client)
|
util.close(client)
|
||||||
|
|
||||||
del client
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user