From 8844dceadcdeebf67d07656bf45d3ddada3e2b5b Mon Sep 17 00:00:00 2001 From: bd Date: Sun, 15 Jun 2025 23:10:09 -0400 Subject: Functional monkey-patched EpollSelector, good results --- replacement_epoll_selector.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 replacement_epoll_selector.py (limited to 'replacement_epoll_selector.py') diff --git a/replacement_epoll_selector.py b/replacement_epoll_selector.py new file mode 100644 index 0000000..545bbc6 --- /dev/null +++ b/replacement_epoll_selector.py @@ -0,0 +1,27 @@ +import selectors +import sys +import time +from typing import List, Tuple + + +class ReplacementEpollSelector(selectors.EpollSelector): + def select( + self, timeout=None + ) -> List[Tuple[selectors.SelectorKey, int]]: + start_time = time.perf_counter() + if not timeout or timeout < 0: + interval = sys.getswitchinterval() + else: + interval = min(timeout, sys.getswitchinterval()) + while True: + selected = super().select(interval) + if selected or timeout == 0 or not timeout: + return selected + end_time = time.perf_counter() + if end_time - start_time >= timeout: + return [] # None + +ReplacementEpollSelector.__qualname__ = ( + "replacement_epoll_selector.ReplacementEpollSelector" +) +selectors.DefaultSelector = ReplacementEpollSelector -- cgit v1.2.3