mirror of
https://github.com/python/cpython.git
synced 2025-11-25 04:34:37 +00:00
gh-110850: Add PyTime_t C API (GH-115215)
* gh-110850: Add PyTime_t C API Add PyTime_t API: * PyTime_t type. * PyTime_MIN and PyTime_MAX constants. * PyTime_AsSecondsDouble(), PyTime_Monotonic(), PyTime_PerfCounter() and PyTime_GetSystemClock() functions. Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
c39272e143
commit
879f4546bf
19 changed files with 448 additions and 114 deletions
83
Doc/c-api/time.rst
Normal file
83
Doc/c-api/time.rst
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
.. highlight:: c
|
||||
|
||||
PyTime C API
|
||||
============
|
||||
|
||||
.. versionadded:: 3.13
|
||||
|
||||
The clock C API provides access to system clocks.
|
||||
It is similar to the Python :mod:`time` module.
|
||||
|
||||
For C API related to the :mod:`datetime` module, see :ref:`datetimeobjects`.
|
||||
|
||||
|
||||
Types
|
||||
-----
|
||||
|
||||
.. c:type:: PyTime_t
|
||||
|
||||
A timestamp or duration in nanoseconds, represented as a signed 64-bit
|
||||
integer.
|
||||
|
||||
The reference point for timestamps depends on the clock used. For example,
|
||||
:c:func:`PyTime_Time` returns timestamps relative to the UNIX epoch.
|
||||
|
||||
The supported range is around [-292.3 years; +292.3 years].
|
||||
Using the Unix epoch (January 1st, 1970) as reference, the supported date
|
||||
range is around [1677-09-21; 2262-04-11].
|
||||
The exact limits are exposed as constants:
|
||||
|
||||
.. c:var:: PyTime_t PyTime_MIN
|
||||
|
||||
Minimum value of :c:type:`PyTime_t`.
|
||||
|
||||
.. c:var:: PyTime_t PyTime_MAX
|
||||
|
||||
Maximum value of :c:type:`PyTime_t`.
|
||||
|
||||
|
||||
Clock Functions
|
||||
---------------
|
||||
|
||||
The following functions take a pointer to a :c:expr:`PyTime_t` that they
|
||||
set to the value of a particular clock.
|
||||
Details of each clock are given in the documentation of the corresponding
|
||||
Python function.
|
||||
|
||||
The functions return ``0`` on success, or ``-1`` (with an exception set)
|
||||
on failure.
|
||||
|
||||
On integer overflow, they set the :c:data:`PyExc_OverflowError` exception and
|
||||
set ``*result`` to the value clamped to the ``[PyTime_MIN; PyTime_MAX]``
|
||||
range.
|
||||
(On current systems, integer overflows are likely caused by misconfigured
|
||||
system time.)
|
||||
|
||||
As any other C API (unless otherwise specified), the functions must be called
|
||||
with the :term:`GIL` held.
|
||||
|
||||
.. c:function:: int PyTime_Monotonic(PyTime_t *result)
|
||||
|
||||
Read the monotonic clock.
|
||||
See :func:`time.monotonic` for important details on this clock.
|
||||
|
||||
.. c:function:: int PyTime_PerfCounter(PyTime_t *result)
|
||||
|
||||
Read the performance counter.
|
||||
See :func:`time.perf_counter` for important details on this clock.
|
||||
|
||||
.. c:function:: int PyTime_Time(PyTime_t *result)
|
||||
|
||||
Read the “wall clock” time.
|
||||
See :func:`time.time` for details important on this clock.
|
||||
|
||||
|
||||
Conversion functions
|
||||
--------------------
|
||||
|
||||
.. c:function:: double PyTime_AsSecondsDouble(PyTime_t t)
|
||||
|
||||
Convert a timestamp to a number of seconds as a C :c:expr:`double`.
|
||||
|
||||
The function cannot fail, but note that :c:expr:`double` has limited
|
||||
accuracy for large values.
|
||||
|
|
@ -20,4 +20,5 @@ and parsing function arguments and constructing Python values from C values.
|
|||
hash.rst
|
||||
reflection.rst
|
||||
codec.rst
|
||||
time.rst
|
||||
perfmaps.rst
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue