Skip to content

Commit 26799c9

Browse files
committed
Enhance workers shutdown, add more log info on shutdown
1 parent 64b055b commit 26799c9

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

granian/server/common.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,23 +356,33 @@ def _respawn_workers(self, workers, spawn_target, target_loader, delay: float =
356356
logger.warning(f'Killing old worker-{idx + 1} after it refused to gracefully stop')
357357
old_wrk.kill()
358358
old_wrk.join()
359+
360+
logger.info(f'Stopped old worker-{idx + 1}')
361+
359362
self._metrics.incr_spawn(len(workers))
360363

361364
def _stop_workers(self):
362365
for wrk in self.wrks:
363366
wrk.terminate()
364367

368+
now = time.monotonic()
369+
timeout = self.workers_kill_timeout if self.workers_kill_timeout else None
365370
for wrk in self.wrks:
366-
wrk.join(self.workers_kill_timeout)
371+
wrk.join(timeout)
372+
367373
if self.workers_kill_timeout:
368374
# the worker might still be reported after `join`, let's context switch
369375
if wrk.is_alive():
370376
time.sleep(0.001)
371377
if wrk.is_alive():
372-
logger.warning(f'Killing worker-{wrk.idx} after it refused to gracefully stop')
378+
logger.warning(f'Killing worker-{wrk.idx + 1} after it refused to gracefully stop')
373379
wrk.kill()
374380
wrk.join()
375381

382+
timeout = max(timeout - (time.monotonic() - now), 0.001)
383+
384+
logger.info(f'Stopped worker-{wrk.idx + 1}')
385+
376386
self.wrks.clear()
377387

378388
def _workers_lifetime_watcher(self, ttl):
@@ -481,19 +491,24 @@ def startup(self, spawn_target, target_loader):
481491

482492
def shutdown(self, exit_code=0):
483493
logger.info('Shutting down granian')
494+
484495
if self.metrics_enabled:
485496
self._stop_metrics()
486497
self._stop_workers()
487498
self._stop_ipc()
488499
self._call_hooks(self.hooks_shutdown)
489500
self._unlink_pidfile()
501+
502+
logger.info('Granian shutdown completed, see ya!')
503+
490504
if not exit_code and self.interrupt_children:
491505
exit_code = 1
492506
if exit_code:
493507
sys.exit(exit_code)
494508

495509
def _reload(self, spawn_target, target_loader):
496510
logger.info('HUP signal received, gracefully respawning workers..')
511+
497512
workers = list(range(self.workers))
498513
self.reload_signal = False
499514
self.respawned_wrks.clear()

0 commit comments

Comments
 (0)