Dang; sorry, thought I hit "Reply to all".

I ran your program on two separate systems, three versions of Python here at work:
1. Pent M 2GHz/Windows XP Pro, running Cygwin Python 2.4.3:
 flips   heads  tails diff   %
1000000 499598 500402 804 99.9196 per cent
Time was 2.863 seconds
os.times() is (2.5779999999999998, 0.156, 0.0, 0.0, 14526.053)

2. AMD Opteron/Linux RHE 4, running Python 2.2.3:
 flips   heads  tails diff   %
1000000 499111 500889 1778 99.8222 per cent
Time was 6.972 seconds
os.times() is (6.9699999999999998, 0.02, 0.0, 0.0, 3496342.9399999999 )


3. Pent M 2GHz/Windows XP Pro, running Windows Python 2.4.3:
 flips   heads  tails diff   %
1000000 499667 500333 666 99.9334 per cent
Time was 2.172 seconds
os.times() is (0.265625, 2.125, 0.0, 0.0, 0.0)

The second machine is a workhorse doing a lot, and it is also a virtual machine.  The first and third is my work laptop - notice that the difference between cygwin (Posix/UNIX) and Windows is how the user/system time is computed.  And also how the real time is returned.

The Windows APIs might swap values or might just handle things differently.  I can't say without a lot more research.

  -Arcege

On 10/3/06, Dick Moores <[EMAIL PROTECTED]> wrote:
At 05:24 AM 10/3/2006, Michael P. Reilly wrote:
>It is not really a "ghost".  On most systems, there is a split
>between what happens while you are a "user" and what happens deep
>inside the operation "system".  The function is showing you how much
>time elapsed while in those two areas of the system.
>
>To show you what I mean, take a simple program that writes to the disk:
>
>def show_me_the_spam(breakfast):
>     file = open(" spam.txt", "w")
>     for i in range(10:
>         print >>file, "spam, spam, %s and spam" % breakfast
>     file.close()
>show_me_the_spam("eggs")

( 0.25, 0.15625, 0.0, 0.0, 0.0)  run included creating spam.txt
(0.171875, 0.09375, 0.0, 0.0, 0.0) after spam.txt already there

The (user time)/(system time) ratios are 1.6 and 1.83, respectively.

For my coinFlip.py I got
(0.3125, 4.015625, 0.0, 0.0, 0.0)

the (user time)/(system time) ratio was 0.079. Why the big
difference? From your explanation I would have thought that your
script would have a LOWER ratio than coinFlip.py because of the file
operations.

Here's coinFlips.py and its result again:

==================================================
# coinFlip.py

import time, os
from random import choice

heads, tails = 0, 0
flips = 1000000

timeStart = time.time()
for x in xrange(flips):
         coin = choice(["heads", "tails"])
         if coin == "heads":
                 heads += 1
         else:
                 tails += 1

timeEnd = time.time()
osTimes = os.times
difference = abs(heads - tails)
print " flips   heads  tails diff   %"
print flips, heads, tails, difference, 100 -
(100*difference*1.0/flips), "per cent"
print "Time was %.4g seconds" % (timeEnd - timeStart)
print "os.times() is", osTimes()
======================================================

  >>>
Evaluating 1coinFlip.py
   flips   heads  tails diff   %
1000000 500902 499098 1804 99.8196 per cent
Time was 4.156 seconds
os.times() is (0.3125, 4.015625, 0.0, 0.0, 0.0)
  >>>


If I reduce flips from 1000000 to 1000, I get
>>>
Evaluating 1coinFlip.py
  flips   heads  tails diff   %
1000 482 518 36 96.4 per cent
Time was 0.016 seconds
os.times() is (0.296875 , 0.09375, 0.0, 0.0, 0.0)
>>>

with a ratio of 3.17. So what's happening during the 1,000,000 loop
that's put into "system" space?

>Most of the execution of the program would happen as the "user";
>things like calling functions, evaluating string parameters,
>counting in the loop.
>
>But the parts that would need to talk to hardware, parts that might
>be dangerous to have the program have direct control over or might
>need to be shared with other programs at the same time (like a
>printer or a keyboard or a disk drive) - these parts of the program
>are hidden underneath function calls and statements like "open" and
>"print" and put into a "system" space.
>
>How much time you spend in "system" and "user" space tells you how
>CPU and resource intensive your program is.
>
>The 3rd and 4th values are the same, but cumulative for all that
>programs "children".  A program can spawn subprocesses to help it
>(see os.system and the like).
>
>All the above times are CPU times - time spent while the program has
>been using fractions of CPU seconds.  The last value shows that
>actual real duration of the program, similar to your (timeEnd -
>timeStart), but a bit more accurate.  (Though it appears that value
>isn't supported on your system?)

My system is
a Dell  Dimension 4600i  running Windows XP Professional Service Pack
2 (build 2600).

Why wouldn't that value be supported? Should I call Dell? Bang on
MS's door? (I live about a mile away.)  I feel a bit cheated. ;)

Thanks,  Michael, for your extended answer..

Dick




_______________________________________________
Tutor maillist  -   Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor



--
There's so many different worlds,
So many different suns.
And we have just one world,
But we live in different ones.
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to