Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions Doc/library/asyncio-eventloop.rst
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ a different clock than :func:`time.time`.
Arrange for the *callback* to be called after the given *delay*
seconds (either an int or float).

An instance of :class:`asyncio.Handle` is returned, which can be
An instance of :class:`asyncio.TimerHandle` is returned, which can be
used to cancel the callback.

*callback* will be called exactly once per call to :meth:`call_later`.
Expand All @@ -193,7 +193,7 @@ a different clock than :func:`time.time`.

This method's behavior is the same as :meth:`call_later`.

An instance of :class:`asyncio.Handle` is returned, which can be
An instance of :class:`asyncio.TimerHandle` is returned, which can be
used to cancel the callback.

:ref:`Use functools.partial to pass keywords to the callback
Expand Down Expand Up @@ -1076,8 +1076,7 @@ Handle
.. class:: Handle

A callback wrapper object returned by :func:`AbstractEventLoop.call_soon`,
:func:`AbstractEventLoop.call_soon_threadsafe`, :func:`AbstractEventLoop.call_later`,
and :func:`AbstractEventLoop.call_at`.
:func:`AbstractEventLoop.call_soon_threadsafe`.

.. method:: cancel()

Expand All @@ -1090,6 +1089,22 @@ Handle

.. versionadded:: 3.7

.. class:: TimerHandle

A callback wrapper object returned by :func:`AbstractEventLoop.call_later`,
and :func:`AbstractEventLoop.call_at`.

The class is inherited from :class:`Handle`.

.. method:: when()

Return a scheduled callback time as :class:`float` seconds.

The time is an absolute timestamp, using the same time
reference as :meth:`AbstractEventLoop.time`.

.. versionadded:: 3.7


SendfileNotAvailableError
-------------------------
Expand Down
8 changes: 8 additions & 0 deletions Lib/asyncio/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ def cancel(self):
self._loop._timer_handle_cancelled(self)
super().cancel()

def when(self):
"""Return a scheduled callback time.

The time is an absolute timestamp, using the same time
reference as loop.time().
"""
return self._when


class AbstractServer:
"""Abstract server returned by create_server()."""
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_asyncio/test_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -2679,6 +2679,12 @@ def test_hash(self):
mock.Mock())
self.assertEqual(hash(h), hash(when))

def test_when(self):
when = time.monotonic()
h = asyncio.TimerHandle(when, lambda: False, (),
mock.Mock())
self.assertEqual(when, h.when())

def test_timer(self):
def callback(*args):
return args
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Implement ``asyncio.TimerHandle.when()`` method.