bpo-40192: Use thread_cputime for time.thread_time to improve resolution (GH-19381)
On AIX, time.thread_time() is now implemented with thread_cputime() which has nanosecond resolution, rather than clock_gettime(CLOCK_THREAD_CPUTIME_ID) which has a resolution of 10 ms.
This commit is contained in:
parent
62972d9d73
commit
4541086232
|
@ -480,6 +480,14 @@ The :mod:`socket` module now exports the :data:`~socket.CAN_RAW_JOIN_FILTERS`
|
||||||
constant on Linux 4.1 and greater.
|
constant on Linux 4.1 and greater.
|
||||||
(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)
|
(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)
|
||||||
|
|
||||||
|
time
|
||||||
|
----
|
||||||
|
|
||||||
|
On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()``
|
||||||
|
which has nanosecond resolution, rather than
|
||||||
|
``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms.
|
||||||
|
(Contributed by Batuhan Taskaya in :issue:`40192`)
|
||||||
|
|
||||||
sys
|
sys
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
On AIX, :func:`~time.thread_time` is now implemented with ``thread_cputime()``
|
||||||
|
which has nanosecond resolution, rather than
|
||||||
|
``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms.
|
||||||
|
Patch by Batuhan Taskaya.
|
|
@ -24,6 +24,10 @@
|
||||||
# include <pthread.h>
|
# include <pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_AIX)
|
||||||
|
# include <sys/thread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__WATCOMC__) && !defined(__QNX__)
|
#if defined(__WATCOMC__) && !defined(__QNX__)
|
||||||
# include <i86.h>
|
# include <i86.h>
|
||||||
#else
|
#else
|
||||||
|
@ -1343,6 +1347,30 @@ _PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(_AIX)
|
||||||
|
#define HAVE_THREAD_TIME
|
||||||
|
static int
|
||||||
|
_PyTime_GetThreadTimeWithInfo(_PyTime_t *tp, _Py_clock_info_t *info)
|
||||||
|
{
|
||||||
|
/* bpo-40192: On AIX, thread_cputime() is preferred: it has nanosecond
|
||||||
|
resolution, whereas clock_gettime(CLOCK_THREAD_CPUTIME_ID)
|
||||||
|
has a resolution of 10 ms. */
|
||||||
|
thread_cputime_t tc;
|
||||||
|
if (thread_cputime(-1, &tc) != 0) {
|
||||||
|
PyErr_SetFromErrno(PyExc_OSError);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info) {
|
||||||
|
info->implementation = "thread_cputime()";
|
||||||
|
info->monotonic = 1;
|
||||||
|
info->adjustable = 0;
|
||||||
|
info->resolution = 1e-9;
|
||||||
|
}
|
||||||
|
*tp = _PyTime_FromNanoseconds(tc.stime + tc.utime);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#elif defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
|
#elif defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
|
||||||
#define HAVE_THREAD_TIME
|
#define HAVE_THREAD_TIME
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Reference in New Issue