diff options
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 |
