异步中的循环时间是否与time.monotonic相同?

时间:2019-02-04 14:59:35

标签: python python-asyncio

这些时钟相同吗? time.monotonic()asyncio.get_event_loop().time()。我的系统上似乎是这种情况,但是除了这句话外,我找不到任何相关文档:

  

事件循环使用单调时钟来跟踪时间。

但是,这并不意味着这两个时钟具有相同的绝对值。

2 个答案:

答案 0 :(得分:2)

是的,就是这样实现的:

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()可以被覆盖以返回其他实现。

答案 1 :(得分:1)

  

但是,这并不意味着这两个时钟具有相同的绝对值。

正确,实际上它的说法恰恰相反,即事件循环可以使用任何单调时钟。 当前实现只是调用time.monotonic()(未记录),但是将来可能会改用更高效的时钟,该时钟返回的值与time.monotonic()返回的值不同

话虽如此,请注意,这种转换不太可能发生,但就loop.time()合同而言,是允许的。