]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-106554: replace `_BaseSelectorImpl._key_from_fd` with `dict.get` (#106555)
authorJ. Nick Koston <nick@koston.org>
Fri, 14 Jul 2023 18:46:30 +0000 (08:46 -1000)
committerGitHub <noreply@github.com>
Fri, 14 Jul 2023 18:46:30 +0000 (03:46 +0900)
Lib/selectors.py
Misc/NEWS.d/next/Library/2023-07-09-01-59-24.gh-issue-106554.37c53J.rst [new file with mode: 0644]

index dfcc125dcd94ef49c2ea9eedfab978ebb1604b43..6d82935445d4b1998d2f433db7acb82d47bb9dfd 100644 (file)
@@ -276,19 +276,6 @@ class _BaseSelectorImpl(BaseSelector):
     def get_map(self):
         return self._map
 
-    def _key_from_fd(self, fd):
-        """Return the key associated to a given file descriptor.
-
-        Parameters:
-        fd -- file descriptor
-
-        Returns:
-        corresponding key, or None if not found
-        """
-        try:
-            return self._fd_to_key[fd]
-        except KeyError:
-            return None
 
 
 class SelectSelector(_BaseSelectorImpl):
@@ -336,7 +323,7 @@ class SelectSelector(_BaseSelectorImpl):
             if fd in w:
                 events |= EVENT_WRITE
 
-            key = self._key_from_fd(fd)
+            key = self._fd_to_key.get(fd)
             if key:
                 ready.append((key, events & key.events))
         return ready
@@ -426,7 +413,7 @@ class _PollLikeSelector(_BaseSelectorImpl):
             if event & ~self._EVENT_WRITE:
                 events |= EVENT_READ
 
-            key = self._key_from_fd(fd)
+            key = self._fd_to_key.get(fd)
             if key:
                 ready.append((key, events & key.events))
         return ready
@@ -479,7 +466,7 @@ if hasattr(select, 'epoll'):
                 if event & ~select.EPOLLOUT:
                     events |= EVENT_READ
 
-                key = self._key_from_fd(fd)
+                key = self._fd_to_key.get(fd)
                 if key:
                     ready.append((key, events & key.events))
             return ready
@@ -574,7 +561,7 @@ if hasattr(select, 'kqueue'):
                 if flag == select.KQ_FILTER_WRITE:
                     events |= EVENT_WRITE
 
-                key = self._key_from_fd(fd)
+                key = self._fd_to_key.get(fd)
                 if key:
                     ready.append((key, events & key.events))
             return ready
diff --git a/Misc/NEWS.d/next/Library/2023-07-09-01-59-24.gh-issue-106554.37c53J.rst b/Misc/NEWS.d/next/Library/2023-07-09-01-59-24.gh-issue-106554.37c53J.rst
new file mode 100644 (file)
index 0000000..2136f3a
--- /dev/null
@@ -0,0 +1 @@
+:mod:`selectors`: Reduce Selector overhead by using a ``dict.get()`` to lookup file descriptors.