Re: [Python-Dev] Python Benchmarks

2006年6月08日 04:32:30 -0700

Fredrik Lundh wrote:
> M.-A. Lemburg wrote:
> 
>> <sigh> I put the headings for the timeit.py output on the
>> wrong blocks. Thanks for pointing this out.
> 
> so how do you explain the Try/Except results, where timeit and pybench 
> seems to agree?
The pybench results match those of timeit.py on my test machine
in both cases. I just mixed up the headers when I wrote the email.
Here's the console print-out:
Tools/pybench> ~/projects/Python/Installation/bin/python Calls.py
10 loops, best of 3: 21.8 msec per loop
Tools/pybench> ~/projects/Python/Installation/bin/python Exceptions.py
100 loops, best of 3: 15.4 msec per loop
Tools/pybench> ~/projects/Python/Installation/bin/python
Python 2.5a2 (trunk, Jun 8 2006, 01:51:06)
[GCC 3.3.4 (pre 3.3.5 20040809)] on linux2
Tools/pybench> python Calls.py
100 loops, best of 3: 18.2 msec per loop
Tools/pybench> python Exceptions.py
100 loops, best of 3: 17 msec per loop
Tools/pybench> python
Python 2.4.2 (#1, Oct 1 2005, 15:24:35)
[GCC 3.3.4 (pre 3.3.5 20040809)] on linux2
Calls.py is using timit.py against the PythonFunctionCalls
test and Exceptions.py the TryRaiseExcept test.
Function calls are slower in 2.5, while try-except in 2.5 is
faster than 2.4.
I've attached the Calls.py file below.
-- 
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Jun 08 2006)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
2006年07月03日: EuroPython 2006, CERN, Switzerland 24 days left
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
from pybench import Test
class PythonFunctionCalls(Test):
 version = 2.0
 operations = 5*(1+4+4+2)
 rounds = 60000
 def test(self):
 global f,f1,g,h
 # define functions
 def f():
 pass
 def f1(x):
 pass
 def g(a,b,c):
 return a,b,c
 def h(a,b,c,d=1,e=2,f=3):
 return d,e,f
 # do calls
 for i in xrange(self.rounds):
 f()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 h(i,i,3,i,i)
 h(i,i,i,2,i,3)
 f()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 h(i,i,3,i,i)
 h(i,i,i,2,i,3)
 f()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 h(i,i,3,i,i)
 h(i,i,i,2,i,3)
 f()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 h(i,i,3,i,i)
 h(i,i,i,2,i,3)
 f()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 g(i,i,i)
 h(i,i,3,i,i)
 h(i,i,i,2,i,3)
 def calibrate(self):
 global f,f1,g,h
 # define functions
 def f():
 pass
 def f1(x):
 pass
 def g(a,b,c):
 return a,b,c
 def h(a,b,c,d=1,e=2,f=3):
 return d,e,f
 # do calls
 for i in xrange(self.rounds):
 pass
###
class BuiltinFunctionCalls(Test):
 version = 2.0
 operations = 5*(2+5+5+5)
 rounds = 60000
 def test(self):
 # localize functions
 f0 = globals
 f1 = hash
 f2 = cmp
 f3 = range
 # do calls
 for i in xrange(self.rounds):
 f0()
 f0()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f0()
 f0()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f0()
 f0()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f0()
 f0()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f0()
 f0()
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f1(i)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f2(1,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 f3(1,3,2)
 def calibrate(self):
 # localize functions
 f0 = dir
 f1 = hash
 f2 = range
 f3 = range
 # do calls
 for i in xrange(self.rounds):
 pass
###
class PythonMethodCalls(Test):
 version = 2.0
 operations = 5*(6 + 5 + 4)
 rounds = 30000
 def test(self):
 class c:
 x = 2
 s = 'string'
 def f(self):
 return self.x
 def j(self,a,b):
 self.y = a
 self.t = b
 return self.y
 def k(self,a,b,c=3):
 self.y = a
 self.s = b
 self.t = c
 o = c()
 for i in xrange(self.rounds):
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.j(i,i)
 o.j(i,i)
 o.j(i,2)
 o.j(i,2)
 o.j(2,2)
 o.k(i,i)
 o.k(i,2)
 o.k(i,2,3)
 o.k(i,i,c=4)
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.j(i,i)
 o.j(i,i)
 o.j(i,2)
 o.j(i,2)
 o.j(2,2)
 o.k(i,i)
 o.k(i,2)
 o.k(i,2,3)
 o.k(i,i,c=4)
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.j(i,i)
 o.j(i,i)
 o.j(i,2)
 o.j(i,2)
 o.j(2,2)
 o.k(i,i)
 o.k(i,2)
 o.k(i,2,3)
 o.k(i,i,c=4)
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.j(i,i)
 o.j(i,i)
 o.j(i,2)
 o.j(i,2)
 o.j(2,2)
 o.k(i,i)
 o.k(i,2)
 o.k(i,2,3)
 o.k(i,i,c=4)
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.f()
 o.j(i,i)
 o.j(i,i)
 o.j(i,2)
 o.j(i,2)
 o.j(2,2)
 o.k(i,i)
 o.k(i,2)
 o.k(i,2,3)
 o.k(i,i,c=4)
 def calibrate(self):
 class c:
 x = 2
 s = 'string'
 def f(self):
 return self.x
 def j(self,a,b):
 self.y = a
 self.t = b
 def k(self,a,b,c=3):
 self.y = a
 self.s = b
 self.t = c
 o = c
 for i in xrange(self.rounds):
 pass
###
class Recursion(Test):
 version = 2.0
 operations = 5
 rounds = 100000
 def test(self):
 global f
 def f(x):
 if x > 1:
 return f(x-1)
 return 1
 for i in xrange(self.rounds):
 f(10)
 f(10)
 f(10)
 f(10)
 f(10)
 def calibrate(self):
 global f
 def f(x):
 if x > 0:
 return f(x-1)
 return 1
 for i in xrange(self.rounds):
 pass
### Test to make Fredrik happy...
if __name__ == '__main__':
 import timeit
 timeit.TestClass = PythonFunctionCalls
 timeit.main(['-s', 'test = TestClass(); test.rounds = 1000',
 'test.test()'])
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to