From e5a8848d37d665dfc02c676bb3fd5e79e7cf5b9c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Jul 2023 17:03:07 -1000 Subject: [PATCH 1/7] Reduce overhead to add new selectors Avoids raising and catching KeyError twice --- Lib/selectors.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Lib/selectors.py b/Lib/selectors.py index af6a4f94b5008a..e14b1e5bff5c09 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -66,12 +66,19 @@ def __init__(self, selector): def __len__(self): return len(self._selector._fd_to_key) + def get(self, fileobj, default=None): + fd = self._selector._fileobj_lookup(fileobj) + key = self._selector._fd_to_key.get(fd) + if key is None: + return default + return key + def __getitem__(self, fileobj): - try: - fd = self._selector._fileobj_lookup(fileobj) - return self._selector._fd_to_key[fd] - except KeyError: - raise KeyError("{!r} is not registered".format(fileobj)) from None + fd = self._selector._fileobj_lookup(fileobj) + key = self._selector._fd_to_key.get(fd) + if key is None: + raise KeyError("{!r} is not registered".format(fileobj)) + return key def __iter__(self): return iter(self._selector._fd_to_key) From 206dd3850d93adb42f684c4a2a8cec8daa18716e Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 03:04:46 +0000 Subject: [PATCH 2/7] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst diff --git a/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst new file mode 100644 index 00000000000000..814fb8e272e071 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst @@ -0,0 +1 @@ +Reduce overhead to add new selectors From 005ae06b770c7413ef0ce3832223c28f7bd79c49 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Jul 2023 17:20:32 -1000 Subject: [PATCH 3/7] direct get coverage --- Lib/test/test_selectors.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py index c2db88c203920a..0950c1944c3624 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -223,6 +223,8 @@ def test_close(self): self.assertRaises(RuntimeError, s.get_key, wr) self.assertRaises(KeyError, mapping.__getitem__, rd) self.assertRaises(KeyError, mapping.__getitem__, wr) + self.assertEqual(mapping.get(rd), None) + self.assertEqual(mapping.get(wr), None) def test_get_key(self): s = self.SELECTOR() @@ -241,6 +243,7 @@ def test_get_map(self): self.addCleanup(s.close) rd, wr = self.make_socketpair() + sentinel = object() keys = s.get_map() self.assertFalse(keys) @@ -248,6 +251,8 @@ def test_get_map(self): self.assertEqual(list(keys), []) key = s.register(rd, selectors.EVENT_READ, "data") self.assertIn(rd, keys) + self.assertEqual(keys.get(rd), None) + self.assertEqual(keys.get(rd, sentinel), sentinel) self.assertEqual(key, keys[rd]) self.assertEqual(len(keys), 1) self.assertEqual(list(keys), [rd.fileno()]) From 820cb8efafb4c5b88f2b5a8ddce7ef54f1062623 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 11 Jul 2023 18:15:12 -1000 Subject: [PATCH 4/7] fix test order --- Lib/test/test_selectors.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py index 0950c1944c3624..4545cbadb796fd 100644 --- a/Lib/test/test_selectors.py +++ b/Lib/test/test_selectors.py @@ -249,10 +249,11 @@ def test_get_map(self): self.assertFalse(keys) self.assertEqual(len(keys), 0) self.assertEqual(list(keys), []) - key = s.register(rd, selectors.EVENT_READ, "data") - self.assertIn(rd, keys) self.assertEqual(keys.get(rd), None) self.assertEqual(keys.get(rd, sentinel), sentinel) + key = s.register(rd, selectors.EVENT_READ, "data") + self.assertIn(rd, keys) + self.assertEqual(key, keys.get(rd)) self.assertEqual(key, keys[rd]) self.assertEqual(len(keys), 1) self.assertEqual(list(keys), [rd.fileno()]) From 5d2158456aa1d16131aea13d87dfec107eb05d15 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 12 Jul 2023 06:40:49 -1000 Subject: [PATCH 5/7] Update Lib/selectors.py Co-authored-by: Inada Naoki --- Lib/selectors.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Lib/selectors.py b/Lib/selectors.py index e14b1e5bff5c09..dfcc125dcd94ef 100644 --- a/Lib/selectors.py +++ b/Lib/selectors.py @@ -68,10 +68,7 @@ def __len__(self): def get(self, fileobj, default=None): fd = self._selector._fileobj_lookup(fileobj) - key = self._selector._fd_to_key.get(fd) - if key is None: - return default - return key + return self._selector._fd_to_key.get(fd, default) def __getitem__(self, fileobj): fd = self._selector._fileobj_lookup(fileobj) From f0b59e3c471b88d1fff7040c56d85e54a612fdb3 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 12 Jul 2023 06:42:26 -1000 Subject: [PATCH 6/7] Update Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst --- .../next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst index 814fb8e272e071..7cd07ed679ffde 100644 --- a/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst +++ b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst @@ -1 +1 @@ -Reduce overhead to add new selectors +:mod:`selectors`: Add `_SelectorMapping.get()` method and optimize `_SelectorMapping.__getitem__()`. From 8220fc6cc08e59d9a80fb58aea3a0bed2265ee53 Mon Sep 17 00:00:00 2001 From: Inada Naoki Date: Fri, 14 Jul 2023 03:52:09 +0900 Subject: [PATCH 7/7] Update Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst --- .../next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst index 7cd07ed679ffde..c278cad74bd049 100644 --- a/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst +++ b/Misc/NEWS.d/next/Library/2023-07-12-03-04-45.gh-issue-106664.ZeUG78.rst @@ -1 +1 @@ -:mod:`selectors`: Add `_SelectorMapping.get()` method and optimize `_SelectorMapping.__getitem__()`. +:mod:`selectors`: Add ``_SelectorMapping.get()`` method and optimize ``_SelectorMapping.__getitem__()``.