doordash / python-lazy-object-proxy

A fast and thorough lazy object proxy.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

lazy-object-proxy

Documentation Status Travis-CI Build Status AppVeyor Build Status Coverage Status Code Quality Status Scrtinizer Status
PyPI Package latest release PyPI Package monthly downloads PyPI Wheel Supported versions Supported imlementations

A fast and thorough lazy object proxy.

  • Free software: BSD license

Installation

pip install lazy-object-proxy

Documentation

https://python-lazy-object-proxy.readthedocs.org/

Development

To run the all tests run:

tox

Benchmarks

The tested implementations:

  • lazy_object_proxy.slots.Proxy, available as lazy_object_proxy.Proxy if the C extension is not available.
  • lazy_object_proxy.cext.Proxy, available as lazy_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 between simple, django and objproxies 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.

About

A fast and thorough lazy object proxy.

License:BSD 2-Clause "Simplified" License


Languages

Language:Python 62.3%Language:C 33.7%Language:PowerShell 2.7%Language:Batchfile 1.4%