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:
Ankush Menat 2025-01-29 11:57:59 +05:30
parent 2f5b492339
commit 4f74f4a4b8

View File

@ -74,6 +74,7 @@ class ThreadWorker(base.Worker):
# initialise the pool
self.tpool = None
self.poller = None
self.shutdown_event = os.eventfd(1)
self._lock = None
self.futures = deque()
self._keep = deque()
@ -97,6 +98,10 @@ class ThreadWorker(base.Worker):
"""Override this method to customize how the thread pool is created"""
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):
self.alive = False
# worker_int callback
@ -201,6 +206,9 @@ class ThreadWorker(base.Worker):
acceptor = partial(self.accept, server)
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:
# notify the arbiter we are alive
self.notify()