mirror of
https://github.com/python/cpython.git
synced 2024-12-04 15:25:13 +08:00
Merge latest Tulip into asyncio
- Make the new granularity attribute private - Simplify BaseEventLoop._run_once(): avoid math.ceil(), use simple arithmetic instead
This commit is contained in:
parent
3c2f175ec4
commit
669eeaf933
@ -144,12 +144,6 @@ a different clock than :func:`time.time`.
|
||||
Return the current time, as a :class:`float` value, according to the
|
||||
event loop's internal clock.
|
||||
|
||||
.. attribute:: BaseEventLoop.granularity
|
||||
|
||||
Granularity of the time: maximum between the resolution of the
|
||||
:meth:`BaseEventLoop.time` method and the resolution of the selector (see
|
||||
:attr:`selectors.BaseSelector.resolution`).
|
||||
|
||||
.. seealso::
|
||||
|
||||
The :func:`asyncio.sleep` function.
|
||||
|
@ -18,7 +18,6 @@ import collections
|
||||
import concurrent.futures
|
||||
import heapq
|
||||
import logging
|
||||
import math
|
||||
import socket
|
||||
import subprocess
|
||||
import time
|
||||
@ -97,7 +96,7 @@ class BaseEventLoop(events.AbstractEventLoop):
|
||||
self._default_executor = None
|
||||
self._internal_fds = 0
|
||||
self._running = False
|
||||
self.granularity = time.get_clock_info('monotonic').resolution
|
||||
self._granularity = time.get_clock_info('monotonic').resolution
|
||||
|
||||
def _make_socket_transport(self, sock, protocol, waiter=None, *,
|
||||
extra=None, server=None):
|
||||
@ -605,8 +604,6 @@ class BaseEventLoop(events.AbstractEventLoop):
|
||||
elif self._scheduled:
|
||||
# Compute the desired timeout.
|
||||
when = self._scheduled[0]._when
|
||||
# round deadline aways from zero
|
||||
when = math.ceil(when / self.granularity) * self.granularity
|
||||
deadline = max(0, when - self.time())
|
||||
if timeout is None:
|
||||
timeout = deadline
|
||||
@ -632,9 +629,7 @@ class BaseEventLoop(events.AbstractEventLoop):
|
||||
self._process_events(event_list)
|
||||
|
||||
# Handle 'later' callbacks that are ready.
|
||||
now = self.time()
|
||||
# round current time aways from zero
|
||||
now = math.ceil(now / self.granularity) * self.granularity
|
||||
now = self.time() + self._granularity
|
||||
while self._scheduled:
|
||||
handle = self._scheduled[0]
|
||||
if handle._when > now:
|
||||
|
@ -36,7 +36,7 @@ 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._granularity = max(selector.resolution, self._granularity)
|
||||
self._make_self_pipe()
|
||||
|
||||
def _make_socket_transport(self, sock, protocol, waiter=None, *,
|
||||
|
@ -1170,9 +1170,9 @@ class EventLoopTestsMixin:
|
||||
def wait():
|
||||
loop = self.loop
|
||||
calls.append(loop._run_once_counter)
|
||||
yield from asyncio.sleep(loop.granularity * 10, loop=loop)
|
||||
yield from asyncio.sleep(loop._granularity * 10, loop=loop)
|
||||
calls.append(loop._run_once_counter)
|
||||
yield from asyncio.sleep(loop.granularity / 10, loop=loop)
|
||||
yield from asyncio.sleep(loop._granularity / 10, loop=loop)
|
||||
calls.append(loop._run_once_counter)
|
||||
|
||||
self.loop.run_until_complete(wait())
|
||||
|
Loading…
Reference in New Issue
Block a user