summaryrefslogtreecommitdiff
path: root/replacement_epoll_selector.py
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-06-15 23:10:09 -0400
committerbd <bdunahu@operationnull.com>2025-06-15 23:10:09 -0400
commit8844dceadcdeebf67d07656bf45d3ddada3e2b5b (patch)
tree0d4e5204c8091cbf2ecb81437e5e1ab0f72511a1 /replacement_epoll_selector.py
parentc21e4366fb64130d168150f0ed94293e699eb525 (diff)
Functional monkey-patched EpollSelector, good results
Diffstat (limited to 'replacement_epoll_selector.py')
-rw-r--r--replacement_epoll_selector.py27
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