mirror of
https://github.com/python/cpython
synced 2024-09-16 03:20:00 +00:00
gh-106751: Optimize _PolllikeSelector for many iteration case (gh-106884)
This commit is contained in:
parent
1e1f4e91a9
commit
832c37d42a
|
@ -339,11 +339,8 @@ def __init__(self):
|
||||||
|
|
||||||
def register(self, fileobj, events, data=None):
|
def register(self, fileobj, events, data=None):
|
||||||
key = super().register(fileobj, events, data)
|
key = super().register(fileobj, events, data)
|
||||||
poller_events = 0
|
poller_events = ((events & EVENT_READ and self._EVENT_READ)
|
||||||
if events & EVENT_READ:
|
| (events & EVENT_WRITE and self._EVENT_WRITE) )
|
||||||
poller_events |= self._EVENT_READ
|
|
||||||
if events & EVENT_WRITE:
|
|
||||||
poller_events |= self._EVENT_WRITE
|
|
||||||
try:
|
try:
|
||||||
self._selector.register(key.fd, poller_events)
|
self._selector.register(key.fd, poller_events)
|
||||||
except:
|
except:
|
||||||
|
@ -369,11 +366,8 @@ def modify(self, fileobj, events, data=None):
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
if events != key.events:
|
if events != key.events:
|
||||||
selector_events = 0
|
selector_events = ((events & EVENT_READ and self._EVENT_READ)
|
||||||
if events & EVENT_READ:
|
| (events & EVENT_WRITE and self._EVENT_WRITE))
|
||||||
selector_events |= self._EVENT_READ
|
|
||||||
if events & EVENT_WRITE:
|
|
||||||
selector_events |= self._EVENT_WRITE
|
|
||||||
try:
|
try:
|
||||||
self._selector.modify(key.fd, selector_events)
|
self._selector.modify(key.fd, selector_events)
|
||||||
except:
|
except:
|
||||||
|
@ -404,15 +398,13 @@ def select(self, timeout=None):
|
||||||
fd_event_list = self._selector.poll(timeout)
|
fd_event_list = self._selector.poll(timeout)
|
||||||
except InterruptedError:
|
except InterruptedError:
|
||||||
return ready
|
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:
|
if key:
|
||||||
|
events = ((event & ~self._EVENT_READ and EVENT_WRITE)
|
||||||
|
| (event & ~self._EVENT_WRITE and EVENT_READ))
|
||||||
ready.append((key, events & key.events))
|
ready.append((key, events & key.events))
|
||||||
return ready
|
return ready
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Optimize :meth:`_PollLikeSelector.select` for many iteration case.
|
Loading…
Reference in a new issue