summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/selectors.py26
-rw-r--r--Misc/NEWS.d/next/Library/2023-07-19-09-11-08.gh-issue-106751.U9nD_B.rst1
2 files changed, 10 insertions, 17 deletions
diff --git a/Lib/selectors.py b/Lib/selectors.py
index 13497a2..20367c9 100644
--- a/Lib/selectors.py
+++ b/Lib/selectors.py
@@ -339,11 +339,8 @@ class _PollLikeSelector(_BaseSelectorImpl):
def register(self, fileobj, events, data=None):
key = super().register(fileobj, events, data)
- poller_events = 0
- if events & EVENT_READ:
- poller_events |= self._EVENT_READ
- if events & EVENT_WRITE:
- poller_events |= self._EVENT_WRITE
+ poller_events = ((events & EVENT_READ and self._EVENT_READ)
+ | (events & EVENT_WRITE and self._EVENT_WRITE) )
try:
self._selector.register(key.fd, poller_events)
except:
@@ -369,11 +366,8 @@ class _PollLikeSelector(_BaseSelectorImpl):
changed = False
if events != key.events:
- selector_events = 0
- if events & EVENT_READ:
- selector_events |= self._EVENT_READ
- if events & EVENT_WRITE:
- selector_events |= self._EVENT_WRITE
+ selector_events = ((events & EVENT_READ and self._EVENT_READ)
+ | (events & EVENT_WRITE and self._EVENT_WRITE))
try:
self._selector.modify(key.fd, selector_events)
except:
@@ -404,15 +398,13 @@ class _PollLikeSelector(_BaseSelectorImpl):
fd_event_list = self._selector.poll(timeout)
except InterruptedError:
return ready
- for fd, event in fd_event_list:
- events = 0
- if event & ~self._EVENT_READ:
- events |= EVENT_WRITE
- if event & ~self._EVENT_WRITE:
- events |= EVENT_READ
- key = self._fd_to_key.get(fd)
+ fd_to_key_get = self._fd_to_key.get
+ for fd, event in fd_event_list:
+ key = fd_to_key_get(fd)
if key:
+ events = ((event & ~self._EVENT_READ and EVENT_WRITE)
+ | (event & ~self._EVENT_WRITE and EVENT_READ))
ready.append((key, events & key.events))
return ready
diff --git a/Misc/NEWS.d/next/Library/2023-07-19-09-11-08.gh-issue-106751.U9nD_B.rst b/Misc/NEWS.d/next/Library/2023-07-19-09-11-08.gh-issue-106751.U9nD_B.rst
new file mode 100644
index 0000000..b9a9b56
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-07-19-09-11-08.gh-issue-106751.U9nD_B.rst
@@ -0,0 +1 @@
+Optimize :meth:`_PollLikeSelector.select` for many iteration case.