[Python-Dev] Re: [Python-checkins] python/dist/src/Lib timeit.py, 1.15, 1.16

Guido van Rossum guido at python.org
Sun Jan 4 11:41:07 EST 2004


> > > Make timings more consistent by temporarily disabling GC.
> > 
> > Shouldn't this be an option at best? 
> 
> I think not.  The default behavior should be the one that
> gives the most consistent timings between runs.

If the timed code's malloc behavior is predictable (and I say it
usually is!) then the GC behavior should (in theory) also be
predictable, at least if you do a full GC before starting.

But I haven't experimented with this, and from your reversal I take it
that you have.

> > What if I want to time some code
> > that expects GC to be on?
> 
> >>> Timer(stmt, 'import gc; gc.enable()'.timeit()
> 
> If desired, I can add a note to that effect in the docs.

Please do.

> However, GC is such a random event (in terms of when it occurs,
> what it affects, how much time it takes, and the state of the 
> system) that you would always want it off unless you're specifically
> measuring GC performance across two sets of code that handle GC
> differently.  

If I have a piece of code that allocates so much as to trigger GC
regularly, I'd want the GC behavior included in the timings.

> GC performance does make a difference when measuring the performance
> of a whole, memory intensive application; however, that tends to
> fall outside the scope and purpose of the module.

Usually.  That's why I'm asking for a way to change the default
behavior.

> If you really want an option, I can put it in, but why clutter
> the API with something that few people care about or understand.

Your setup suggestion is fine.

> An alternative is to stick with my original idea of running
> a gc.collect() before each timing pass.  I would have done that
> but Tim's comment left me with doubts about whether it was the 
> right thing to do.  On the surface it makes sense and empirical
> tests show that the timings do become more stable.  However, 
> trashing the cache before each run may create timings that don't
> reflect a normal operating environment (though the timeit environment
> is already anything but normal).

Here I agree with Tim.

--Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list