Skip to content

Instantly share code, notes, and snippets.

@jace
Created April 1, 2021 08:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jace/12c878a6d8ce1f799315fa54999bbe5c to your computer and use it in GitHub Desktop.
Save jace/12c878a6d8ce1f799315fa54999bbe5c to your computer and use it in GitHub Desktop.
# Performance test for coaster.sqlalchemy.registry.InstanceRegistry
import timeit
class Registry:
def __init__(self, param=None):
self.param = param
class Namespacer1:
def __init__(self, registry, obj):
self.__registry = registry
self.__obj = obj
self.__param = registry.param
def __getattr__(self, attr):
if self.__param is not None:
return (self.__registry, self.__obj, self.__param)
else:
return (self.__registry, self.__obj)
class Namespacer2:
def __init__(self, registry, obj):
self.__registry = registry
self.__obj = obj
def __getattr__(self, attr):
if self.__registry.param is not None:
return (self.__registry, self.__obj, self.__registry.param)
else:
return (self.__registry, self.__obj)
class Namespacer3:
def __init__(self, registry, obj):
self.__registry = registry
self.__obj = obj
def __getattr__(self, attr):
param = self.__registry.param
if param is not None:
return (self.__registry, self.__obj, param)
else:
return (self.__registry, self.__obj)
r1 = Registry('obj')
r2 = Registry()
if __name__ == '__main__':
# Performance, fastest to slowest:
# 3 (local var), 2 (namespaced access), 1 (instance var)
print(timeit.timeit('a = Namespacer3(r2, r2); a.x', globals=globals()))
print(timeit.timeit('a = Namespacer2(r2, r2); a.x', globals=globals()))
print(timeit.timeit('a = Namespacer1(r2, r2); a.x', globals=globals()))
print(timeit.timeit('a = Namespacer3(r1, r1); a.x', globals=globals()))
print(timeit.timeit('a = Namespacer2(r1, r1); a.x', globals=globals()))
print(timeit.timeit('a = Namespacer1(r1, r1); a.x', globals=globals()))
@jace
Copy link
Author

jace commented Apr 1, 2021

Sample output:

0.7106772370025283
0.7376894779954455
0.8034342819955782
0.7945575620033196
0.8243368799958262
0.8580065710048075

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment