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
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; }
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.