PEP 418: Stephen J. Turnbull's patch 2: english

This commit is contained in:
Victor Stinner 2012-04-21 21:18:13 +02:00
parent 9137ddbec3
commit 323e44fb09
1 changed files with 12 additions and 10 deletions

View File

@ -22,8 +22,8 @@ Rationale
========= =========
If a program uses the system time to schedule events or to implement If a program uses the system time to schedule events or to implement
a timeout, it will not run events at the right moment or stop the a timeout, it may fail to run events at the right moment or stop the
timeout too early or too late when the system time is set manually or timeout too early or too late when the system time is changed manually or
adjusted automatically by NTP. A monotonic clock should be used adjusted automatically by NTP. A monotonic clock should be used
instead to not be affected by system time updates: instead to not be affected by system time updates:
``time.monotonic()``. ``time.monotonic()``.
@ -36,13 +36,14 @@ very bad on Unix. The new ``time.perf_counter()`` function should be
used instead to always get the most precise performance counter with a used instead to always get the most precise performance counter with a
portable behaviour (ex: include time spend during sleep). portable behaviour (ex: include time spend during sleep).
To measure CPU time, Python does not provide directly a portable Until now, Python did not provide directly a portable
function. ``time.clock()`` can be used on Unix, but it has a bad function to measure CPU time. ``time.clock()`` can be used on Unix,
but it has bad
precision. ``resource.getrusage()`` or ``os.times()`` can also be precision. ``resource.getrusage()`` or ``os.times()`` can also be
used on Unix, but they require to compute the sum of time used on Unix, but they require to compute the sum of time
spent in kernel space and user space. The new ``time.process_time()`` spent in kernel space and user space. The new ``time.process_time()``
function acts as a portable counter that always measures CPU time function acts as a portable counter that always measures CPU time
(doesn't include time elapsed during sleep) and has the best available (excluding time elapsed during sleep) and has the best available
precision. precision.
Each operating system implements clocks and performance counters Each operating system implements clocks and performance counters
@ -141,8 +142,9 @@ consecutive calls is valid and is a number of seconds.
On Windows versions older than Vista, ``time.monotonic()`` detects On Windows versions older than Vista, ``time.monotonic()`` detects
``GetTickCount()`` integer overflow (32 bits, roll-over after 49.7 ``GetTickCount()`` integer overflow (32 bits, roll-over after 49.7
days): it increases a delta by 2\ :sup:`32` each time that an overflow days). It increases an internal epoch (reference time by) 2\
is detected. The delta is stored in the process-local state and so :sup:`32` each time that an overflow is detected. The epoch is stored
in the process-local state and so
the value of ``time.monotonic()`` may be different in two Python the value of ``time.monotonic()`` may be different in two Python
processes running for more than 49 days. On more recent versions of processes running for more than 49 days. On more recent versions of
Windows and on other operating systems, ``time.monotonic()`` is Windows and on other operating systems, ``time.monotonic()`` is
@ -563,7 +565,7 @@ Example partial implementation:
Working around operating system bugs? Working around operating system bugs?
------------------------------------- -------------------------------------
Should Python ensure manually that a monotonic clock is truly Should Python ensure that a monotonic clock is truly
monotonic by computing the maximum with the clock value and the monotonic by computing the maximum with the clock value and the
previous value? previous value?
@ -578,7 +580,7 @@ Python may only work around a specific known operating system bug:
`KB274323`_ contains a code example to workaround the bug (use `KB274323`_ contains a code example to workaround the bug (use
GetTickCount() to detect QueryPerformanceCounter() leap). GetTickCount() to detect QueryPerformanceCounter() leap).
Issues of a hacked monotonic function: Issues with "correcting" non-monotonicities:
* if the clock is accidentally set forward by an hour and then back * if the clock is accidentally set forward by an hour and then back
again, you wouldn't have a useful clock for an hour again, you wouldn't have a useful clock for an hour
@ -946,7 +948,7 @@ mach_absolute_time
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
Mac OS X provides a monotonic clock: mach_absolute_time(). It is Mac OS X provides a monotonic clock: mach_absolute_time(). It is
based on absolute elapsed time delta since system boot. It is not based on absolute elapsed time since system boot. It is not
adjusted and cannot be set. adjusted and cannot be set.
mach_timebase_info() gives a fraction to convert the clock value to a mach_timebase_info() gives a fraction to convert the clock value to a