Skip to content

Commit 832c37d

Browse files
authored
gh-106751: Optimize _PolllikeSelector for many iteration case (gh-106884)
1 parent 1e1f4e9 commit 832c37d

File tree

2 files changed

+10
-17
lines changed

2 files changed

+10
-17
lines changed

Lib/selectors.py

+9-17
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,8 @@ def __init__(self):
339339

340340
def register(self, fileobj, events, data=None):
341341
key = super().register(fileobj, events, data)
342-
poller_events = 0
343-
if events & EVENT_READ:
344-
poller_events |= self._EVENT_READ
345-
if events & EVENT_WRITE:
346-
poller_events |= self._EVENT_WRITE
342+
poller_events = ((events & EVENT_READ and self._EVENT_READ)
343+
| (events & EVENT_WRITE and self._EVENT_WRITE) )
347344
try:
348345
self._selector.register(key.fd, poller_events)
349346
except:
@@ -369,11 +366,8 @@ def modify(self, fileobj, events, data=None):
369366

370367
changed = False
371368
if events != key.events:
372-
selector_events = 0
373-
if events & EVENT_READ:
374-
selector_events |= self._EVENT_READ
375-
if events & EVENT_WRITE:
376-
selector_events |= self._EVENT_WRITE
369+
selector_events = ((events & EVENT_READ and self._EVENT_READ)
370+
| (events & EVENT_WRITE and self._EVENT_WRITE))
377371
try:
378372
self._selector.modify(key.fd, selector_events)
379373
except:
@@ -404,15 +398,13 @@ def select(self, timeout=None):
404398
fd_event_list = self._selector.poll(timeout)
405399
except InterruptedError:
406400
return ready
407-
for fd, event in fd_event_list:
408-
events = 0
409-
if event & ~self._EVENT_READ:
410-
events |= EVENT_WRITE
411-
if event & ~self._EVENT_WRITE:
412-
events |= EVENT_READ
413401

414-
key = self._fd_to_key.get(fd)
402+
fd_to_key_get = self._fd_to_key.get
403+
for fd, event in fd_event_list:
404+
key = fd_to_key_get(fd)
415405
if key:
406+
events = ((event & ~self._EVENT_READ and EVENT_WRITE)
407+
| (event & ~self._EVENT_WRITE and EVENT_READ))
416408
ready.append((key, events & key.events))
417409
return ready
418410

Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Optimize :meth:`_PollLikeSelector.select` for many iteration case.

0 commit comments

Comments
 (0)