This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: time.clock(): overflow in programs that run for very long
Type: behavior Stage:
Components: Library (Lib) Versions: Python 2.6
process
Status: closed Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: pitrou, tom65536
Priority: normal Keywords:

Created on 2009-05-19 06:42 by tom65536, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
bug.py tom65536, 2009-05-19 06:42 Program that reproduces the bug.
Messages (4)
msg88069 - (view) Author: Thomas Reiter (tom65536) Date: 2009-05-19 06:42
On a 64-bit Linux machine the attached program generates the following
(shortened) output:

$ python bug.py
...
after 2145.49s: 
after 2145.82s: 
after 2146.14s: 
after 2146.47s: 
after 2146.80s: 
after 2147.13s: 
after 2147.45s: 
after -2147.19s: 
Here's your bug

---------------------------------------------
$ uname -a
Linux XXXX 2.6.18-92.1.22.el5 #1 SMP Tue Dec 16 06:45:03 EST 2008 x86_64
x86_64 x86_64 GNU/Linux

$ python -V
Python 2.6
msg88070 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-19 06:56
time.clock() is a simple wrapper around the C stdlib clock() function.
As the clock() man page says:

« Note that the time can wrap around.  On a 32-bit system where
CLOCKS_PER_SEC equals 1000000 this function will return the same value
approximately every 72 minutes. »

Is it a 32-bit or 64-bit Python build? (you might have a 32-bit build on
a 64-bit system)
If it is a 64-bit build, what are sizeof(clock_t) and CLOCKS_PER_SEC on
a your system? You can compile the following small C program to get the
answer.

#include <stdio.h>
#include <time.h>

int main(int argc, char **argv)
{
    printf("sizeof(clock_t)=%d, CLOCKS_PER_SEC=%d\n",
           sizeof(clock_t), CLOCKS_PER_SEC);
    return 0;
}
msg88071 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009-05-19 07:01
It is very likely you have a 32-bit Python build because:

>>> 2**32/1000000.
4294.9672959999998

and 4294 is exactly the number of seconds by which your clock() value
wraps around.
msg88074 - (view) Author: Thomas Reiter (tom65536) Date: 2009-05-19 07:38
That version of Python is linked against 32-bit libc. Point of overflow
corresponds to
2^31 us.
History
Date User Action Args
2022-04-11 14:56:49adminsetgithub: 50311
2009-05-19 07:38:25tom65536setstatus: open -> closed

messages: + msg88074
2009-05-19 07:01:12pitrousetmessages: + msg88071
2009-05-19 06:57:00pitrousetnosy: + pitrou
messages: + msg88070
2009-05-19 06:43:00tom65536create