mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
fix: fast shutdown (#4)
Break the poller wait by using shutdown event to let it know its time to wake up.
This commit is contained in:
parent
2f5b492339
commit
4f74f4a4b8
@ -74,6 +74,7 @@ class ThreadWorker(base.Worker):
|
|||||||
# initialise the pool
|
# initialise the pool
|
||||||
self.tpool = None
|
self.tpool = None
|
||||||
self.poller = None
|
self.poller = None
|
||||||
|
self.shutdown_event = os.eventfd(1)
|
||||||
self._lock = None
|
self._lock = None
|
||||||
self.futures = deque()
|
self.futures = deque()
|
||||||
self._keep = deque()
|
self._keep = deque()
|
||||||
@ -97,6 +98,10 @@ class ThreadWorker(base.Worker):
|
|||||||
"""Override this method to customize how the thread pool is created"""
|
"""Override this method to customize how the thread pool is created"""
|
||||||
return futures.ThreadPoolExecutor(max_workers=self.cfg.threads)
|
return futures.ThreadPoolExecutor(max_workers=self.cfg.threads)
|
||||||
|
|
||||||
|
def handle_exit(self, sig, frame):
|
||||||
|
self.alive = False
|
||||||
|
os.eventfd_write(self.shutdown_event, 0)
|
||||||
|
|
||||||
def handle_quit(self, sig, frame):
|
def handle_quit(self, sig, frame):
|
||||||
self.alive = False
|
self.alive = False
|
||||||
# worker_int callback
|
# worker_int callback
|
||||||
@ -201,6 +206,9 @@ class ThreadWorker(base.Worker):
|
|||||||
acceptor = partial(self.accept, server)
|
acceptor = partial(self.accept, server)
|
||||||
self.poller.register(sock, selectors.EVENT_READ, acceptor)
|
self.poller.register(sock, selectors.EVENT_READ, acceptor)
|
||||||
|
|
||||||
|
# This is just used to wake up the poller, nothing else needs to be done.
|
||||||
|
self.poller.register(self.shutdown_event, selectors.EVENT_READ, lambda *args: None)
|
||||||
|
|
||||||
while self.alive:
|
while self.alive:
|
||||||
# notify the arbiter we are alive
|
# notify the arbiter we are alive
|
||||||
self.notify()
|
self.notify()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user