On 09/09/2013 08:43 AM, Mark Shannon wrote:
I would like time to investigate this further, but at the moment I think it 
will either make attribute lookup poorly
defined or slow.

Of the top of my head, the problem as a I see it is basically this:
Currently, type.__getattribute__() is a fixed point in the lookup of attributes.
The proposal means that a fixed point is not reached until the cls parameter of 
type.__getattribute__() is either object
or type,
otherwise type.__getattribute__() and type.__locallookup__ must bounce back and 
forth.

This will slow down *every* attribute lookup for what is a fairly obscure use 
case.

Looks like there's a patch we can try at http://bugs.python.org/issue18181.

Here are Ronald's last timings:

        
-------------------------------------------------------------------------------
        PYBENCH 2.1
        
-------------------------------------------------------------------------------
        * using CPython 3.4.0a0 (default, Jul 29 2013, 13:01:34) [GCC 4.4.7 
20120313 (Red Hat 4.4.7-3)]
        * disabled garbage collection
        * system check interval set to maximum: 2147483647
        * using timer: time.perf_counter
        * timer: resolution=1e-09, implementation=clock_gettime(CLOCK_MONOTONIC)

        
-------------------------------------------------------------------------------
        Benchmark: pep447.pybench
        
-------------------------------------------------------------------------------

            Rounds: 10
            Warp:   10
            Timer:  time.perf_counter

            Machine Details:
               Platform ID:    
Linux-2.6.32-358.114.1.openstack.el6.x86_64-x86_64-with-centos-6.4-Final
               Processor:      x86_64

            Python:
               Implementation: CPython
               Executable:     /tmp/default-pep447/bin/python3
               Version:        3.4.0a0
               Compiler:       GCC 4.4.7 20120313 (Red Hat 4.4.7-3)
               Bits:           64bit
               Build:          Jul 29 2013 14:09:12 (#default)
               Unicode:        UCS4


        
-------------------------------------------------------------------------------
        Comparing with: default.pybench
        
-------------------------------------------------------------------------------

            Rounds: 10
            Warp:   10
            Timer:  time.perf_counter

            Machine Details:
               Platform ID:    
Linux-2.6.32-358.114.1.openstack.el6.x86_64-x86_64-with-centos-6.4-Final
               Processor:      x86_64

            Python:
               Implementation: CPython
               Executable:     /tmp/default/bin/python3
               Version:        3.4.0a0
               Compiler:       GCC 4.4.7 20120313 (Red Hat 4.4.7-3)
               Bits:           64bit
               Build:          Jul 29 2013 13:01:34 (#default)
               Unicode:        UCS4


        Test                             minimum run-time        average  
run-time
                                         this    other   diff    this    other  
 diff
        
-------------------------------------------------------------------------------
                  BuiltinFunctionCalls:    45ms    44ms   +1.3%    45ms    44ms 
  +1.3%
                   BuiltinMethodLookup:    26ms    27ms   -2.4%    27ms    27ms 
  -2.2%
                         CompareFloats:    33ms    34ms   -0.7%    33ms    34ms 
  -1.1%
                 CompareFloatsIntegers:    66ms    67ms   -0.9%    66ms    67ms 
  -0.8%
                       CompareIntegers:    51ms    50ms   +0.9%    51ms    50ms 
  +0.8%
                CompareInternedStrings:    34ms    33ms   +0.4%    34ms    34ms 
  -0.4%
                          CompareLongs:    29ms    29ms   -0.1%    29ms    29ms 
  -0.0%
                        CompareStrings:    43ms    44ms   -1.8%    44ms    44ms 
  -1.8%
            ComplexPythonFunctionCalls:    44ms    42ms   +3.9%    44ms    42ms 
  +4.1%
                         ConcatStrings:    33ms    33ms   -0.4%    33ms    33ms 
  -1.0%
                       CreateInstances:    47ms    48ms   -2.9%    47ms    49ms 
  -3.4%
                    CreateNewInstances:    35ms    36ms   -2.5%    36ms    36ms 
  -2.5%
               CreateStringsWithConcat:    69ms    70ms   -0.7%    69ms    70ms 
  -0.9%
                          DictCreation:    52ms    50ms   +3.1%    52ms    50ms 
  +3.0%
                     DictWithFloatKeys:    40ms    44ms  -10.1%    43ms    45ms 
  -5.8%
                   DictWithIntegerKeys:    32ms    36ms  -11.2%    35ms    37ms 
  -4.6%
                    DictWithStringKeys:    29ms    34ms  -15.7%    35ms    40ms 
 -11.0%
                              ForLoops:    30ms    29ms   +2.2%    30ms    29ms 
  +2.2%
                            IfThenElse:    38ms    41ms   -6.7%    38ms    41ms 
  -6.9%
                           ListSlicing:    36ms    36ms   -0.7%    36ms    37ms 
  -1.3%
                        NestedForLoops:    43ms    45ms   -3.1%    43ms    45ms 
  -3.2%
              NestedListComprehensions:    39ms    40ms   -1.7%    39ms    40ms 
  -2.1%
                  NormalClassAttribute:    86ms    82ms   +5.1%    86ms    82ms 
  +5.0%
               NormalInstanceAttribute:    42ms    42ms   +0.3%    42ms    42ms 
  +0.0%
                   PythonFunctionCalls:    39ms    38ms   +3.5%    39ms    38ms 
  +2.8%
                     PythonMethodCalls:    51ms    49ms   +3.0%    51ms    50ms 
  +2.8%
                             Recursion:    67ms    68ms   -1.4%    67ms    68ms 
  -1.4%
                          SecondImport:    41ms    36ms  +12.5%    41ms    36ms 
 +12.6%
                   SecondPackageImport:    45ms    40ms  +13.1%    45ms    40ms 
 +13.2%
                 SecondSubmoduleImport:    92ms    95ms   -2.4%    95ms    98ms 
  -3.6%
               SimpleComplexArithmetic:    28ms    28ms   -0.1%    28ms    28ms 
  -0.2%
                SimpleDictManipulation:    57ms    57ms   -1.0%    57ms    58ms 
  -1.0%
                 SimpleFloatArithmetic:    29ms    28ms   +4.7%    29ms    28ms 
  +4.9%
              SimpleIntFloatArithmetic:    37ms    41ms   -8.5%    37ms    41ms 
  -8.7%
               SimpleIntegerArithmetic:    37ms    41ms   -9.4%    37ms    42ms 
 -10.2%
              SimpleListComprehensions:    33ms    33ms   -1.9%    33ms    34ms 
  -2.9%
                SimpleListManipulation:    28ms    30ms   -4.3%    29ms    30ms 
  -4.1%
                  SimpleLongArithmetic:    26ms    26ms   +0.5%    26ms    26ms 
  +0.5%
                            SmallLists:    40ms    40ms   +0.1%    40ms    40ms 
  +0.1%
                           SmallTuples:    46ms    47ms   -2.4%    46ms    48ms 
  -3.0%
                 SpecialClassAttribute:   126ms   120ms   +4.7%   126ms   121ms 
  +4.4%
              SpecialInstanceAttribute:    42ms    42ms   +0.6%    42ms    42ms 
  +0.8%
                        StringMappings:    94ms    91ms   +3.9%    94ms    91ms 
  +3.8%
                      StringPredicates:    48ms    49ms   -1.7%    48ms    49ms 
  -2.1%
                         StringSlicing:    45ms    45ms   +1.4%    46ms    45ms 
  +1.5%
                             TryExcept:    23ms    22ms   +4.9%    23ms    22ms 
  +4.8%
                            TryFinally:    32ms    32ms   -0.1%    32ms    32ms 
  +0.1%
                        TryRaiseExcept:    17ms    17ms   +0.9%    17ms    17ms 
  +0.5%
                          TupleSlicing:    49ms    48ms   +1.1%    49ms    49ms 
  +1.0%
                           WithFinally:    48ms    47ms   +2.3%    48ms    47ms 
  +2.4%
                       WithRaiseExcept:    45ms    44ms   +0.8%    45ms    45ms 
  +0.5%
        
-------------------------------------------------------------------------------
        Totals:                          2284ms  2287ms   -0.1%  2306ms  2308ms 
  -0.1%

        (this=pep447.pybench, other=default.pybench)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to