Commit cf5c7552 authored by Guido van Rossum's avatar Guido van Rossum

Optimize BaseSelector.modify(). Patch by Arnaud Faure.

parent 18db85ed
...@@ -138,11 +138,14 @@ class BaseSelector(metaclass=ABCMeta): ...@@ -138,11 +138,14 @@ class BaseSelector(metaclass=ABCMeta):
key = self._fd_to_key[_fileobj_to_fd(fileobj)] key = self._fd_to_key[_fileobj_to_fd(fileobj)]
except KeyError: except KeyError:
raise KeyError("{!r} is not registered".format(fileobj)) from None raise KeyError("{!r} is not registered".format(fileobj)) from None
if events != key.events or data != key.data: if events != key.events:
# TODO: If only the data changed, use a shortcut that only
# updates the data.
self.unregister(fileobj) self.unregister(fileobj)
return self.register(fileobj, events, data) return self.register(fileobj, events, data)
elif data != key.data:
# Use a shortcut to update the data.
key = key._replace(data=data)
self._fd_to_key[key.fd] = key
return key
else: else:
return key return key
......
...@@ -6,6 +6,7 @@ import socket ...@@ -6,6 +6,7 @@ import socket
from test import support from test import support
from time import sleep from time import sleep
import unittest import unittest
import unittest.mock
try: try:
from time import monotonic as time from time import monotonic as time
except ImportError: except ImportError:
...@@ -124,6 +125,15 @@ class BaseSelectorTestCase(unittest.TestCase): ...@@ -124,6 +125,15 @@ class BaseSelectorTestCase(unittest.TestCase):
# modify unknown file obj # modify unknown file obj
self.assertRaises(KeyError, s.modify, 999999, selectors.EVENT_READ) self.assertRaises(KeyError, s.modify, 999999, selectors.EVENT_READ)
# modify use a shortcut
d3 = object()
s.register = unittest.mock.Mock()
s.unregister = unittest.mock.Mock()
s.modify(rd, selectors.EVENT_READ, d3)
self.assertFalse(s.register.called)
self.assertFalse(s.unregister.called)
def test_close(self): def test_close(self):
s = self.SELECTOR() s = self.SELECTOR()
self.addCleanup(s.close) self.addCleanup(s.close)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment