diff options
| author | bd <bdunahu@operationnull.com> | 2025-06-15 23:10:09 -0400 |
|---|---|---|
| committer | bd <bdunahu@operationnull.com> | 2025-06-15 23:10:09 -0400 |
| commit | 8844dceadcdeebf67d07656bf45d3ddada3e2b5b (patch) | |
| tree | 0d4e5204c8091cbf2ecb81437e5e1ab0f72511a1 /replacement_epoll_selector.py | |
| parent | c21e4366fb64130d168150f0ed94293e699eb525 (diff) | |
Functional monkey-patched EpollSelector, good results
Diffstat (limited to 'replacement_epoll_selector.py')
| -rw-r--r-- | replacement_epoll_selector.py | 27 |
1 files changed, 27 insertions, 0 deletions
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 |
