[Tutor] could somebody please explain...
Clayton Kirkwood
crk at godblessthe.us
Fri Oct 3 17:38:46 CEST 2014
Steven, I don't disagree with most of your analysis, I didn't know of other
timing routines, and all of the superfluous stuff adds up. However, for a
simple test, the route that I took was adequate I think. Yes I timed the
whole wakeup to get to work, but the important element is that whatever I
timed, was accurate between runs. And that is all that was import: to see
the relative times.I also ran the complete program multiple times and found
the test to be relatively consistent. I appreciate your notice of timeit(),
I'll have to look into that, thanks. Thanks for taking the time to review
and comment.
Clayton
!-----Original Message-----
!From: Tutor [mailto:tutor-bounces+crk=godblessthe.us at python.org] On
!Behalf Of Steven D'Aprano
!Sent: Friday, October 03, 2014 6:21 AM
!To: tutor at python.org
!Subject: Re: [Tutor] could somebody please explain...
!
!On Wed, Oct 01, 2014 at 09:43:29AM -0700, Clayton Kirkwood wrote:
!
!> # program to test time and count options
!>
!> import datetime,operator, sys
!> from datetime import time, date, datetime date = datetime.now()
!> dayofweek = date.strftime("%a, %b") print("Today is", dayofweek,
!> date.day, "at ", date.time())
!>
!> start = 0
!> count_max=int(input("give me a number")) start_time = datetime.now()
!>
!> print( start_time )
!> while start < count_max:
!> start=start + 1
!>
!> end_time = datetime.now()
!> print( "s=s+1 time difference is:", (end_time - start_time) )
!
!
!The first problem you have here is that you are not actually timing how
!long it takes to add "start + 1".
!You're actually timing eight things:
!
!- lookup the value of start;
!- lookup the value of count_max;
!- check whether the first is less than the second;
!- decide whether to loop, or exit the loop;
!- if we're still inside the loop, lookup start again;
!- add 1 to it;
!- store the result in start;
!- jump back to the top of the loop.
!
!
!So the results you get don't tell you much about the speed of start+1.
!
!Analogy: you want to know how long it takes you to drive to work in the
!morning. So you wake up, eat breakfast, brush your teeth, start the
!stopwatch, have a shower, get dressed, get in the car, drive to the gas
!station, fill up, buy a newspaper, and drive the rest of the way to
!work, and finally stop the stopwatch. The time you get is neither
!accurate as "driving time", nor "total time it takes to get to work"
!time.
!
!Ideally, we want to do as little extra work as possible inside the
!timing loop, so we can get a figure as close as possible to the time
!actually taken by + as we can.
!
!The second problem is that you are using datetime.now() as your clock.
!That's not a high-precision clock. It might be only be accurate to a
!second, or a millisecond. It certainly isn't accurate enough to measure
!a single addition:
!
!py> from datetime import datetime
!py> x = 1
!py> t = datetime.now(); x + 1; datetime.now() - t
!2
!datetime.timedelta(0, 0, 85)
!
!
!This tells me that it supposedly took 85 microseconds to add two
!numbers, but as I showed before with timeit, the real figure is closer
!to 0.09 microseconds. That's a lot of noise! About 85000% noise!
!
!Unfortunately, it is tricky to know which clock to use. On Windows,
!time.clock() used to be the best one; on Linux, time.time() was the
!best. Starting in Python 3.3, there are a bunch more accurate clocks in
!the time module. But if you use the timeit module, it already picks the
!best clock for the job. But if in doubt, time.time() will normally be
!acceptable.
!
!https://docs.python.org/3/library/time.html
!
!https://docs.python.org/3/library/timeit.html
!
!
!
!--
!Steven
!_______________________________________________
!Tutor maillist - Tutor at python.org
!To unsubscribe or change subscription options:
!https://mail.python.org/mailman/listinfo/tutor
More information about the Tutor
mailing list