A fast and thorough lazy object proxy.
- Free software: BSD license
pip install lazy-object-proxy
https://python-lazy-object-proxy.readthedocs.org/
To run the all tests run:
tox
The tested implementations:
lazy_object_proxy.slots.Proxy
, available aslazy_object_proxy.Proxy
if the C extension is not available.lazy_object_proxy.cext.Proxy
, available aslazy_object_proxy.Proxy
.- objproxies - fork of PJE's ProxyTypes with Python 3 support. [1]
- SimpleLazyObject from Django. [1]
lazy_object_proxy.simple.Proxy
- uses the non-data descriptor trick. [1]
For Python 2.7:
------ benchmark: min 5 rounds (of min 25.00us), 5.00s max time, timer: time.clock ----- Name (time in ns) Min Max Mean StdDev Rounds Iterations ---------------------------------------------------------------------------------------- test_perf[slots] 705.3837 3091.0072 720.4805 27.2588 180453 38 test_perf[cext] 93.6346 278.9731 95.1876 2.5474 164373 312 test_perf[simple] 398.1636 1863.2017 405.4325 13.1411 207521 59 test_perf[django] 471.6515 983.0809 480.4264 10.2059 193043 53 test_perf[objproxies] 1204.7003 4818.8010 1475.3419 114.8213 55898 1 ----------------------------------------------------------------------------------------
For Python 3.4:
-- benchmark: min 5 rounds (of min 25.00us), 5.00s max time, timer: time.perf_counter -- Name (time in ns) Min Max Mean StdDev Rounds Iterations ---------------------------------------------------------------------------------------- test_perf[slots] 803.1335 2728.8286 826.0882 20.5562 182436 33 test_perf[cext] 103.2911 254.4223 104.6869 2.6294 164373 277 test_perf[simple] 448.6894 2040.6147 462.0342 17.1546 218443 49 test_perf[django] 518.3013 1225.7125 532.0523 14.4672 218443 43 test_perf[objproxies] 1116.8575 3827.4331 1157.8419 43.9602 174755 24 ----------------------------------------------------------------------------------------
For PyPy 2.4:
Note that the mean difference betweensimple
,django
andobjproxies
is smaller the standard deviance, thus it cannot be considered.
------ benchmark: min 5 rounds (of min 25.00us), 15.00s max time, timer: time.clock ---- Name (time in ns) Min Max Mean StdDev Rounds Iterations ---------------------------------------------------------------------------------------- test_perf[slots] 1.9577 260.2979 2.2457 0.4882 498050 15384 test_perf[simple] 31.3536 4374.4246 34.7433 11.7566 478894 999 test_perf[django] 32.5269 4443.8381 35.8729 16.9071 461157 1000 test_perf[objproxies] 33.1293 4529.3718 36.7435 13.3377 452773 1000 ----------------------------------------------------------------------------------------
[1] | (1, 2, 3) Lacks support for certain more tricky operations like vars(obj) and other operators. |