Является ли время цикла в asyncio таким же, как time.monotonic? - PullRequest
0 голосов
/ 04 февраля 2019

Это одни и те же часы?time.monotonic() и asyncio.get_event_loop().time().Похоже, что это так в моей системе, но я не могу найти никакой связанной документации, кроме этого предложения:

Цикл событий использует монотонные часы для отслеживания времени.

Однако этоне означает, что эти два часа имеют одинаковое абсолютное значение.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Однако это не означает, что эти два такта имеют одинаковое абсолютное значение.

Истина, и фактически это прямо противоположно тому, что цикл обработки событий может использовать любые монотонные часы.бы то ни было.Текущая реализация 1006 * просто вызывает time.monotonic() - что не задокументировано - но в будущем можно переключиться, скажем, на более эффективные часы, которые возвращают значения, отличные от значений, возвращаемых time.monotonic().

Сказав это, обратите внимание, что такое переключение не очень вероятно вероятно , но что касается контракта loop.time(), то оно разрешено.

0 голосов
/ 04 февраля 2019

Да, вот как это реализовано:

class BaseEventLoop(events.AbstractEventLoop):
    (...)

    def time(self):
        """Return the time according to the event loop's clock.
        This is a float expressed in seconds since an epoch, but the
        epoch, precision, accuracy and drift are unspecified and may
        differ per event loop.
        """
        return time.monotonic()

Подробнее здесь: https://github.com/python/cpython/blob/fb2c3465f09e1f720cdae7eca87d62125a327fd9/Lib/asyncio/base_events.py#L635

Обратите внимание, что это верно для цикла событий по умолчанию.И asyncio.get_event_loop() может быть перезаписано для возврата какой-либо другой реализации.

...