PEP 418: Stephen J. Turnbull's patch: typos
This commit is contained in:
parent
d0166c382d
commit
9137ddbec3
50
pep-0418.txt
50
pep-0418.txt
|
@ -49,7 +49,7 @@ Each operating system implements clocks and performance counters
|
||||||
differently, and it is useful to know exactly which function is used
|
differently, and it is useful to know exactly which function is used
|
||||||
and some properties of the clock like its resolution and its
|
and some properties of the clock like its resolution and its
|
||||||
precision. The new ``time.get_clock_info()`` function gives access to
|
precision. The new ``time.get_clock_info()`` function gives access to
|
||||||
all available information of each Python time function.
|
all available information about each Python time function.
|
||||||
|
|
||||||
New functions:
|
New functions:
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ 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 than an overflow
|
days): it increases a delta by 2\ :sup:`32` each time that an overflow
|
||||||
is detected. The delta is stored in the process-local state and so
|
is detected. The delta 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
|
||||||
|
@ -432,7 +432,7 @@ Other names for time.monotonic()
|
||||||
point.
|
point.
|
||||||
|
|
||||||
The name "time.try_monotonic()" was also proposed for an older
|
The name "time.try_monotonic()" was also proposed for an older
|
||||||
proposition of time.monotonic() which was falling back to the system
|
version of time.monotonic() which would fall back to the system
|
||||||
time when no monotonic clock was available.
|
time when no monotonic clock was available.
|
||||||
|
|
||||||
Other names for time.perf_counter()
|
Other names for time.perf_counter()
|
||||||
|
@ -461,11 +461,11 @@ system time.
|
||||||
|
|
||||||
Issues:
|
Issues:
|
||||||
|
|
||||||
* It is hard to define correctly such function in the documentation:
|
* It is hard to define such a function correctly in the documentation:
|
||||||
is it monotonic? Is it steady? Is it adjusted?
|
is it monotonic? Is it steady? Is it adjusted?
|
||||||
* Some user want to decide what to do when no monotonic clock is
|
* Some users want to decide what to do when no monotonic clock is
|
||||||
available: use another clock, display an error, or do something
|
available: use another clock, display an error, or do something
|
||||||
else?
|
else.
|
||||||
|
|
||||||
Different APIs were proposed to define such function.
|
Different APIs were proposed to define such function.
|
||||||
|
|
||||||
|
@ -499,7 +499,7 @@ the first call to time.monotonic().
|
||||||
Choosing the clock from a list of constraints
|
Choosing the clock from a list of constraints
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
|
||||||
The PEP as proposed offers a few new clocks, but their guarentees
|
The PEP as proposed offers a few new clocks, but their guarantees
|
||||||
are deliberately loose in order to offer useful clocks on different
|
are deliberately loose in order to offer useful clocks on different
|
||||||
platforms. This inherently embeds policy in the calls, and the
|
platforms. This inherently embeds policy in the calls, and the
|
||||||
caller must thus choose a policy.
|
caller must thus choose a policy.
|
||||||
|
@ -516,7 +516,7 @@ evaluate their suitability.
|
||||||
|
|
||||||
The primary interface is a function make simple choices easy:
|
The primary interface is a function make simple choices easy:
|
||||||
the caller can use ``time.get_clock(*flags)`` with some combination of flags.
|
the caller can use ``time.get_clock(*flags)`` with some combination of flags.
|
||||||
This include at least:
|
This includes at least:
|
||||||
|
|
||||||
* time.MONOTONIC: clock cannot go backward
|
* time.MONOTONIC: clock cannot go backward
|
||||||
* time.STEADY: clock rate is steady
|
* time.STEADY: clock rate is steady
|
||||||
|
@ -536,7 +536,7 @@ be chained using the or operator. Example of a simple policy decision::
|
||||||
The available clocks always at least include a wrapper for ``time.time()``,
|
The available clocks always at least include a wrapper for ``time.time()``,
|
||||||
so a final call with no flags can always be used to obtain a working clock.
|
so a final call with no flags can always be used to obtain a working clock.
|
||||||
|
|
||||||
Example of flags of system clocks:
|
Examples of flags of system clocks:
|
||||||
|
|
||||||
* QueryPerformanceCounter: MONOTONIC | HIGHRES
|
* QueryPerformanceCounter: MONOTONIC | HIGHRES
|
||||||
* GetTickCount: MONOTONIC | STEADY
|
* GetTickCount: MONOTONIC | STEADY
|
||||||
|
@ -606,7 +606,7 @@ Glossary
|
||||||
|
|
||||||
:Clock:
|
:Clock:
|
||||||
An instrument for measuring time. Different clocks have different
|
An instrument for measuring time. Different clocks have different
|
||||||
characteristics; for example, a clock with <nanonsecond>
|
characteristics; for example, a clock with <nanosecond>
|
||||||
<precision> may start to <drift> after a few minutes, while a less
|
<precision> may start to <drift> after a few minutes, while a less
|
||||||
precise clock remained accurate for days. This PEP is primarily
|
precise clock remained accurate for days. This PEP is primarily
|
||||||
concerned with clocks which use a unit of seconds.
|
concerned with clocks which use a unit of seconds.
|
||||||
|
@ -723,7 +723,7 @@ List of hardware clocks
|
||||||
* TSC (Time Stamp Counter): Historically, the TSC increased with every
|
* TSC (Time Stamp Counter): Historically, the TSC increased with every
|
||||||
internal processor clock cycle, but now the rate is usually constant
|
internal processor clock cycle, but now the rate is usually constant
|
||||||
(even if the processor changes frequency) and usually equals the
|
(even if the processor changes frequency) and usually equals the
|
||||||
maximum processor frequency. Multiple cores having different TSC
|
maximum processor frequency. Multiple cores have different TSC
|
||||||
values. Hibernation of system will reset TSC value. The RDTSC
|
values. Hibernation of system will reset TSC value. The RDTSC
|
||||||
instruction can be used to read this counter. CPU frequency scaling
|
instruction can be used to read this counter. CPU frequency scaling
|
||||||
for power saving.
|
for power saving.
|
||||||
|
@ -734,10 +734,10 @@ List of hardware clocks
|
||||||
IBM "Summit" series chipsets (ex: x440). This is available in IA32
|
IBM "Summit" series chipsets (ex: x440). This is available in IA32
|
||||||
and IA64 architectures.
|
and IA64 architectures.
|
||||||
* PIT (programmable interrupt timer): Intel 8253/8254 chipsets with a
|
* PIT (programmable interrupt timer): Intel 8253/8254 chipsets with a
|
||||||
configurable frequency in range 18.2 Hz - 1.2 MHz. It is a 16-bit
|
configurable frequency in range 18.2 Hz - 1.2 MHz. It uses a 16-bit
|
||||||
counter.
|
counter.
|
||||||
* RTC (Real-time clock). Most RTCs use a crystal oscillator with a
|
* RTC (Real-time clock). Most RTCs use a crystal oscillator with a
|
||||||
frequency of 32,768 Hz
|
frequency of 32,768 Hz.
|
||||||
|
|
||||||
|
|
||||||
Linux clocksource
|
Linux clocksource
|
||||||
|
@ -747,7 +747,7 @@ There were 4 implementations of the time in the Linux kernel: UTIME
|
||||||
(1996), timer wheel (1997), HRT (2001) and hrtimers (2007). The
|
(1996), timer wheel (1997), HRT (2001) and hrtimers (2007). The
|
||||||
latter is the result of the "high-res-timers" project started by
|
latter is the result of the "high-res-timers" project started by
|
||||||
George Anzinger in 2001, with contributions by Thomas Gleixner and
|
George Anzinger in 2001, with contributions by Thomas Gleixner and
|
||||||
Douglas Niehaus. hrtimers implementation was merged into Linux
|
Douglas Niehaus. The hrtimers implementation was merged into Linux
|
||||||
2.6.21, released in 2007.
|
2.6.21, released in 2007.
|
||||||
|
|
||||||
hrtimers supports various clock sources. It sets a priority to each
|
hrtimers supports various clock sources. It sets a priority to each
|
||||||
|
@ -782,7 +782,7 @@ Read also the `time(7) manual page
|
||||||
FreeBSD timecounter
|
FreeBSD timecounter
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
kern.timecounter.choice list available hardware clocks with their
|
kern.timecounter.choice lists available hardware clocks with their
|
||||||
priority. The sysctl program can be used to change the timecounter.
|
priority. The sysctl program can be used to change the timecounter.
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
|
@ -819,7 +819,7 @@ Read `Timecounters: Efficient and precise timekeeping in SMP kernels
|
||||||
Performance
|
Performance
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
Reading an hardware clock has a cost. The following table compares
|
Reading a hardware clock has a cost. The following table compares
|
||||||
the performance of different hardware clocks on Linux 3.3 with Intel
|
the performance of different hardware clocks on Linux 3.3 with Intel
|
||||||
Core i7-2600 at 3.40GHz (8 cores). The `bench_time.c
|
Core i7-2600 at 3.40GHz (8 cores). The `bench_time.c
|
||||||
<http://hg.python.org/peps/file/tip/pep-0418/bench_time.c>`_ program
|
<http://hg.python.org/peps/file/tip/pep-0418/bench_time.c>`_ program
|
||||||
|
@ -864,7 +864,7 @@ CLOCK_MONOTONIC 201 ns 10766 ns 4498 ns 3943 ns
|
||||||
======================== ====== ========= ======= =======
|
======================== ====== ========= ======= =======
|
||||||
|
|
||||||
Each function was called 100,000 times and CLOCK_MONOTONIC was used to
|
Each function was called 100,000 times and CLOCK_MONOTONIC was used to
|
||||||
get the time before and after. The benchmark was run 5 times to keep
|
get the time before and after. The benchmark was run 5 times, keeping
|
||||||
the minimum time.
|
the minimum time.
|
||||||
|
|
||||||
|
|
||||||
|
@ -881,14 +881,14 @@ NTP has different methods to adjust a clock:
|
||||||
* "stepping": jump by a large amount in a single discrete step (which
|
* "stepping": jump by a large amount in a single discrete step (which
|
||||||
is done with ``settimeofday()``)
|
is done with ``settimeofday()``)
|
||||||
|
|
||||||
By default, the time is slewed if the offset is less than 128 ms, or
|
By default, the time is slewed if the offset is less than 128 ms, but
|
||||||
stepped otherwise.
|
stepped otherwise.
|
||||||
|
|
||||||
Slewing is generally desirable (i.e. we should use CLOCK_MONOTONIC,
|
Slewing is generally desirable (i.e. we should use CLOCK_MONOTONIC,
|
||||||
not CLOCK_MONOTONIC_RAW) if one wishes to measure "real" time (and not
|
not CLOCK_MONOTONIC_RAW) if one wishes to measure "real" time (and not
|
||||||
a time-like object like CPU cycles). This is because the clock on the
|
a time-like object like CPU cycles). This is because the clock on the
|
||||||
other end of the NTP connection from you is probably better at keeping
|
other end of the NTP connection from you is probably better at keeping
|
||||||
time: hopefully that thirty five thousand dollars of Cesium
|
time: hopefully that thirty-five thousand dollars of Cesium
|
||||||
timekeeping goodness is doing something better than your PC's $3
|
timekeeping goodness is doing something better than your PC's $3
|
||||||
quartz crystal, after all.
|
quartz crystal, after all.
|
||||||
|
|
||||||
|
@ -1223,7 +1223,7 @@ to CLOCK_REALTIME, less precise but faster.
|
||||||
Alexander Shishkin proposed an API for Linux to be notified when the system
|
Alexander Shishkin proposed an API for Linux to be notified when the system
|
||||||
clock is changed: `timerfd: add TFD_NOTIFY_CLOCK_SET to watch for clock changes
|
clock is changed: `timerfd: add TFD_NOTIFY_CLOCK_SET to watch for clock changes
|
||||||
<http://lwn.net/Articles/432395/>`_ (4th version of the API, March 2011). The
|
<http://lwn.net/Articles/432395/>`_ (4th version of the API, March 2011). The
|
||||||
API is not accepted yet, CLOCK_BOOTTIME provides a similar feature.
|
API is not accepted yet, but CLOCK_BOOTTIME provides a similar feature.
|
||||||
|
|
||||||
|
|
||||||
Process Time
|
Process Time
|
||||||
|
@ -1291,7 +1291,7 @@ Functions
|
||||||
program.
|
program.
|
||||||
|
|
||||||
* getrusage(RUSAGE_SELF) returns a structure of resource usage of the currenet
|
* getrusage(RUSAGE_SELF) returns a structure of resource usage of the currenet
|
||||||
process. ru_utime is use CPU time and ru_stime is the system CPU time.
|
process. ru_utime is user CPU time and ru_stime is the system CPU time.
|
||||||
* times(): structure of process times. The precision is 1 / ticks_per_seconds,
|
* times(): structure of process times. The precision is 1 / ticks_per_seconds,
|
||||||
where ticks_per_seconds is sysconf(_SC_CLK_TCK) or the HZ constant.
|
where ticks_per_seconds is sysconf(_SC_CLK_TCK) or the HZ constant.
|
||||||
|
|
||||||
|
@ -1466,11 +1466,11 @@ Other functions
|
||||||
System Standby
|
System Standby
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The ACPI power state "S3" is as system standby mode, also called
|
The ACPI power state "S3" is a system standby mode, also called
|
||||||
"Suspend to RAM". RAM remains powered.
|
"Suspend to RAM". RAM remains powered.
|
||||||
|
|
||||||
On Windows, the ``WM_POWERBROADCAST`` message is send to Windows
|
On Windows, the ``WM_POWERBROADCAST`` message is sent to Windows
|
||||||
application to notify them of power-management events (ex: ower status
|
applications to notify them of power-management events (ex: owner status
|
||||||
has changed).
|
has changed).
|
||||||
|
|
||||||
For Mac OS X, read `Registering and unregistering for sleep and wake
|
For Mac OS X, read `Registering and unregistering for sleep and wake
|
||||||
|
@ -1484,7 +1484,7 @@ Footnotes
|
||||||
|
|
||||||
.. [#pseudo] "_time" is an hypothetical module only used for the example.
|
.. [#pseudo] "_time" is an hypothetical module only used for the example.
|
||||||
The time module is implemented in C and so there is no need for
|
The time module is implemented in C and so there is no need for
|
||||||
such module.
|
such a module.
|
||||||
|
|
||||||
|
|
||||||
Links
|
Links
|
||||||
|
|
Loading…
Reference in New Issue