diff options
| author | Victor Stinner <victor.stinner@gmail.com> | 2014-02-07 23:36:32 +0100 |
|---|---|---|
| committer | Victor Stinner <victor.stinner@gmail.com> | 2014-02-07 23:36:32 +0100 |
| commit | 757189c319ac2e8108a232d211703fbf2283dbad (patch) | |
| tree | 64967c88facc03ccd7a91117bd0fb730aa348c3f | |
| parent | 9cf186282bee509a646104339176c0eef7c770fb (diff) | |
| download | trollius-757189c319ac2e8108a232d211703fbf2283dbad.tar.gz | |
Remove resolution and _granularity from selectors and asyncio
* Remove selectors.BaseSelector.resolution attribute
* Remove asyncio.BaseEventLoop._granularity attribute
| -rw-r--r-- | asyncio/base_events.py | 3 | ||||
| -rw-r--r-- | asyncio/proactor_events.py | 1 | ||||
| -rw-r--r-- | asyncio/selector_events.py | 1 | ||||
| -rw-r--r-- | asyncio/selectors.py | 21 | ||||
| -rw-r--r-- | tests/test_base_events.py | 3 | ||||
| -rw-r--r-- | tests/test_events.py | 23 |
6 files changed, 10 insertions, 42 deletions
diff --git a/asyncio/base_events.py b/asyncio/base_events.py index cafd10a..db57ee8 100644 --- a/asyncio/base_events.py +++ b/asyncio/base_events.py @@ -96,7 +96,6 @@ class BaseEventLoop(events.AbstractEventLoop): self._default_executor = None self._internal_fds = 0 self._running = False - self._granularity = time.get_clock_info('monotonic').resolution def _make_socket_transport(self, sock, protocol, waiter=None, *, extra=None, server=None): @@ -638,7 +637,7 @@ class BaseEventLoop(events.AbstractEventLoop): self._process_events(event_list) # Handle 'later' callbacks that are ready. - now = self.time() + self._granularity + now = self.time() while self._scheduled: handle = self._scheduled[0] if handle._when > now: diff --git a/asyncio/proactor_events.py b/asyncio/proactor_events.py index 6b5707c..74566b2 100644 --- a/asyncio/proactor_events.py +++ b/asyncio/proactor_events.py @@ -365,7 +365,6 @@ class BaseProactorEventLoop(base_events.BaseEventLoop): self._selector = proactor # convenient alias self._self_reading_future = None self._accept_futures = {} # socket file descriptor => Future - self._granularity = max(proactor.resolution, self._granularity) proactor.set_loop(self) self._make_self_pipe() diff --git a/asyncio/selector_events.py b/asyncio/selector_events.py index 3690145..202c14b 100644 --- a/asyncio/selector_events.py +++ b/asyncio/selector_events.py @@ -36,7 +36,6 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): selector = selectors.DefaultSelector() logger.debug('Using selector: %s', selector.__class__.__name__) self._selector = selector - self._granularity = max(selector.resolution, self._granularity) self._make_self_pipe() def _make_socket_transport(self, sock, protocol, waiter=None, *, diff --git a/asyncio/selectors.py b/asyncio/selectors.py index 056e45c..bb2a45a 100644 --- a/asyncio/selectors.py +++ b/asyncio/selectors.py @@ -83,11 +83,6 @@ class BaseSelector(metaclass=ABCMeta): performant implementation on the current platform. """ - @abstractproperty - def resolution(self): - """Resolution of the selector in seconds""" - return None - @abstractmethod def register(self, fileobj, events, data=None): """Register a file object. @@ -289,10 +284,6 @@ class SelectSelector(_BaseSelectorImpl): self._readers = set() self._writers = set() - @property - def resolution(self): - return 1e-6 - def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) if events & EVENT_READ: @@ -345,10 +336,6 @@ if hasattr(select, 'poll'): super().__init__() self._poll = select.poll() - @property - def resolution(self): - return 1e-3 - def register(self, fileobj, events, data=None): key = super().register(fileobj, events, data) poll_events = 0 @@ -400,10 +387,6 @@ if hasattr(select, 'epoll'): super().__init__() self._epoll = select.epoll() - @property - def resolution(self): - return 1e-3 - def fileno(self): return self._epoll.fileno() @@ -468,10 +451,6 @@ if hasattr(select, 'kqueue'): super().__init__() self._kqueue = select.kqueue() - @property - def resolution(self): - return 1e-9 - def fileno(self): return self._kqueue.fileno() diff --git a/tests/test_base_events.py b/tests/test_base_events.py index 0d90d3f..5b05684 100644 --- a/tests/test_base_events.py +++ b/tests/test_base_events.py @@ -124,7 +124,8 @@ class BaseEventLoopTests(unittest.TestCase): self.loop.run_forever() dt = self.loop.time() - t0 - self.assertGreaterEqual(dt, delay - self.loop._granularity, dt) + # 50 ms: maximum granularity of the event loop + self.assertGreaterEqual(dt, delay - 0.050, dt) # tolerate a difference of +800 ms because some Python buildbots # are really slow self.assertLessEqual(dt, 0.9, dt) diff --git a/tests/test_events.py b/tests/test_events.py index c11d20f..c2988c0 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -1170,28 +1170,19 @@ class EventLoopTestsMixin: orig_run_once = self.loop._run_once self.loop._run_once_counter = 0 self.loop._run_once = _run_once - calls = [] @asyncio.coroutine def wait(): loop = self.loop - calls.append(loop._run_once_counter) - yield from asyncio.sleep(loop._granularity * 10, loop=loop) - calls.append(loop._run_once_counter) - yield from asyncio.sleep(loop._granularity / 10, loop=loop) - calls.append(loop._run_once_counter) + yield from asyncio.sleep(1e-2, loop=loop) + yield from asyncio.sleep(1e-4, loop=loop) self.loop.run_until_complete(wait()) - calls.append(self.loop._run_once_counter) - self.assertEqual(calls, [1, 3, 5, 6]) - - def test_granularity(self): - granularity = self.loop._granularity - self.assertGreater(granularity, 0.0) - # Worst expected granularity: 1 ms on Linux (limited by poll/epoll - # resolution), 15.6 ms on Windows (limited by time.monotonic - # resolution) - self.assertLess(granularity, 0.050) + # The ideal number of call is 6, but on some platforms, the selector + # may sleep at little bit less than timeout depending on the resolution + # of the clock used by the kernel. Tolerate 2 useless calls on these + # platforms. + self.assertLessEqual(self.loop._run_once_counter, 8) class SubprocessTestsMixin: |
