| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
datetime.datetime now round microseconds to nearest with ties going to nearest
even integer (ROUND_HALF_EVEN), as round(float), instead of rounding towards
-Infinity (ROUND_FLOOR).
pytime API: replace _PyTime_ROUND_HALF_UP with _PyTime_ROUND_HALF_EVEN. Fix
also _PyTime_Divide() for negative numbers.
_PyTime_AsTimeval_impl() now reuses _PyTime_Divide() instead of reimplementing
rounding modes.
|
| |
| |
| |
| |
| | |
datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp().
microseconds sign should be kept before rounding.
|
| |
| |
| |
| |
| | |
Only use it on the most important number. This change fixes also a compiler
warning on modf().
|
| |
| |
| |
| |
| | |
Ensure that the tv_nsec field is set, even if the function fails
with an overflow.
|
|\ \
| |/ |
|
| |
| |
| |
| |
| | |
I was not supposed to commit the function with the name pymonotonic_new(). I
forgot to rename it.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Don't check anymore at runtime that the monotonic clock doesn't go backward.
Yes, it happens. It occurs sometimes each month on a Debian buildbot slave
running in a VM.
The problem is that Python cannot do anything useful if a monotonic clock goes
backward. It was decided in the PEP 418 to not fix the system, but only expose
the clock provided by the OS.
|
| |
| |
| |
| |
| |
| | |
with ties going away from zero (ROUND_HALF_UP), as Python 2 and Python older
than 3.3, instead of rounding to nearest with ties going to nearest even
integer (ROUND_HALF_EVEN).
|
| | |
|
| |
| |
| |
| |
| | |
* initialize numerator on overflow error ensure that numerator is smaller than
* denominator.
|
| | |
|
| |
| |
| |
| |
| | |
Change also _PyTime_FromSeconds() assertion to ensure that the _PyTime_t type
is used.
|
|/
|
|
| |
Move code to convert double timestamp to subfunctions.
|
|
|
|
|
| |
Fix also _Py_InitializeEx_Private(): initialize time before initializing
import, import_init() uses the _PyTime API (for thread locks).
|
|
|
|
|
|
| |
_PyTime_AsMicroseconds() rounding.
Add also unit tests.
|
| |
|
|
|
|
| |
using the C volatile keyword.
|
|
|
|
| |
Use _PyTime_ROUND_FLOOR and _PyTime_ROUND_CEILING instead.
|
|
|
|
| |
Add also more tests for ROUNd_FLOOR.
|
|
|
|
| |
check that microseconds and nanoseconds fits into the specified range.
|
|
|
|
|
| |
Add _PyTime_AsTimeval_noraise() function. Call it when it's not possible (or
not useful) to raise a Python exception on overflow.
|
|
|
|
|
|
| |
- _PyTime_ObjectToTime_t()
- _PyTime_ObjectToTimespec()
- _PyTime_ObjectToTimeval()
|
| |
|
|
|
|
|
| |
* Remove _PyTime_gettimeofday()
* Add _PyTime_GetSystemClock()
|
|
|
|
|
| |
_PyTime_GetSystemClockWithInfo() to not raise an exception and return 0 on
error (it should never occur)
|
|
|
|
|
| |
module. time.clock_settime() now uses this rounding method instead of
_PyTime_ROUND_DOWN to handle correctly dates before 1970.
|
|
|
|
| |
Remove also the now unused _PyTime_AddDouble() function.
|
| |
|
|
|
|
|
|
|
|
|
| |
Add also a new _PyTime_AsMicroseconds() function.
threading.TIMEOUT_MAX is now be smaller: only 292 years instead of 292,271
years on 64-bit system for example. Sorry, your threads will hang a *little
bit* shorter. Call me if you want to ensure that your locks wait longer, I can
share some tricks with you.
|
|
|
|
|
|
|
| |
* _PyTime_AsTimeval() now ensures that tv_usec is always positive
* _PyTime_AsTimespec() now ensures that tv_nsec is always positive
* _PyTime_AsTimeval() now returns an integer on overflow instead of raising an
exception
|
|
|
|
|
| |
* Add _PyTime_AsTimespec()
* Add unit tests for _PyTime_AsTimespec()
|
|
|
|
| |
* Add _PyTime_GetSystemClockWithInfo()
|
|
|
|
|
|
| |
* Add _PyTime_FromNanoseconds()
* Add _PyTime_AsSecondsDouble()
* Add unit tests for _PyTime_AsSecondsDouble()
|
|
|
|
|
|
| |
* Rename _PyTime_FromObject() to _PyTime_FromSecondsObject()
* Add _PyTime_AsNanosecondsObject() and _testcapi.pytime_fromsecondsobject()
* Add unit tests
|
|
|
|
| |
GetTickCount64() is now always available.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In practice, _PyTime_t is a number of nanoseconds. Its C type is a 64-bit
signed number. It's integer value is in the range [-2^63; 2^63-1]. In seconds,
the range is around [-292 years; +292 years]. In term of Epoch timestamp
(1970-01-01), it can store a date between 1677-09-21 and 2262-04-11.
The API has a resolution of 1 nanosecond and use integer number. With a
resolution on 1 nanosecond, 64-bit IEEE 754 floating point numbers loose
precision after 194 days. It's not the case with this API. The drawback is
overflow for values outside [-2^63; 2^63-1], but these values are unlikely for
most Python modules, except of the datetime module.
New functions:
- _PyTime_GetMonotonicClock()
- _PyTime_FromObject()
- _PyTime_AsMilliseconds()
- _PyTime_AsTimeval()
This change uses these new functions in time.sleep() to avoid rounding issues.
The new API will be extended step by step, and the old API will be removed step
by step. Currently, some code is duplicated just to be able to move
incrementally, instead of pushing a large change at once.
|
| |
|
|
|
|
|
|
|
|
| |
interrupted by a signal
Add a new _PyTime_AddDouble() function and remove _PyTime_ADD_SECONDS() macro.
The _PyTime_ADD_SECONDS only supported an integer number of seconds, the
_PyTime_AddDouble() has subsecond resolution.
|
|
|
|
| |
remove unnecessary version checks.
|
|
|
|
| |
the monotonic test
|
|
|
|
|
| |
threading.Lock.acquire(), threading.RLock.acquire() and socket operations now
use a monotonic clock, instead of the system clock, when a timeout is used.
|
|
|
|
| |
Ensure also that the tv_usec field is consistent: in range [0; 999999].
|
|
|
|
|
|
|
|
|
| |
Other changes:
* The whole _PyTime API is private (not defined if Py_LIMITED_API is set)
* _PyTime_gettimeofday_info() also returns -1 on error
* Simplify PyTime_gettimeofday(): only use clock_gettime(CLOCK_REALTIME) or
gettimeofday() on UNIX. Don't fallback to ftime() or time() anymore.
|
|
|
|
|
|
| |
clock_gettime(CLOCK_REALTIME) if available. As a side effect, Python now
depends on the librt library on Solaris and on Linux (only with glibc older
than 2.17).
|
|
|
|
|
|
| |
aways from zero, instead of rounding towards zero.
It should make test_asyncio more reliable, especially test_timeout_rounding() test.
|
|
|
|
|
|
|
|
| |
Fix also its value on Windows and Linux according to its documentation:
"adjustable" indicates if the clock *can be* adjusted, not if it is or was
adjusted.
In most cases, it is not possible to indicate if a clock is or was adjusted.
|
|
|
|
|
|
| |
Removed futimens as it is now redundant.
Changed shutil.copystat to use st_atime_ns and st_mtime_ns from os.stat
and ns= parameter to utime--it once again preserves exact metadata on Linux!
|
| |
|