Spaces:
Runtime error
Runtime error
Metadata-Version: 2.1 | |
Name: async-lru | |
Version: 2.0.4 | |
Summary: Simple LRU cache for asyncio | |
Home-page: https://github.com/aio-libs/async-lru | |
Maintainer: aiohttp team <[email protected]> | |
Maintainer-email: [email protected] | |
License: MIT License | |
Project-URL: Chat: Matrix, https://matrix.to/#/#aio-libs:matrix.org | |
Project-URL: Chat: Matrix Space, https://matrix.to/#/#aio-libs-space:matrix.org | |
Project-URL: CI: GitHub Actions, https://github.com/aio-libs/async-lru/actions | |
Project-URL: GitHub: repo, https://github.com/aio-libs/async-lru | |
Keywords: asyncio,lru,lru_cache | |
Classifier: License :: OSI Approved :: MIT License | |
Classifier: Intended Audience :: Developers | |
Classifier: Programming Language :: Python | |
Classifier: Programming Language :: Python :: 3 | |
Classifier: Programming Language :: Python :: 3 :: Only | |
Classifier: Programming Language :: Python :: 3.8 | |
Classifier: Programming Language :: Python :: 3.9 | |
Classifier: Programming Language :: Python :: 3.10 | |
Classifier: Programming Language :: Python :: 3.11 | |
Classifier: Programming Language :: Python :: 3.12 | |
Classifier: Development Status :: 5 - Production/Stable | |
Classifier: Framework :: AsyncIO | |
Requires-Python: >=3.8 | |
Description-Content-Type: text/x-rst | |
License-File: LICENSE | |
Requires-Dist: typing-extensions (>=4.0.0) ; python_version < "3.11" | |
async-lru | |
========= | |
:info: Simple lru cache for asyncio | |
.. image:: https://github.com/aio-libs/async-lru/actions/workflows/ci-cd.yml/badge.svg?event=push | |
:target: https://github.com/aio-libs/async-lru/actions/workflows/ci-cd.yml?query=event:push | |
:alt: GitHub Actions CI/CD workflows status | |
.. image:: https://img.shields.io/pypi/v/async-lru.svg?logo=Python&logoColor=white | |
:target: https://pypi.org/project/async-lru | |
:alt: async-lru @ PyPI | |
.. image:: https://codecov.io/gh/aio-libs/async-lru/branch/master/graph/badge.svg | |
:target: https://codecov.io/gh/aio-libs/async-lru | |
.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat | |
:target: https://matrix.to/#/%23aio-libs:matrix.org | |
:alt: Matrix Room β #aio-libs:matrix.org | |
.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat | |
:target: https://matrix.to/#/%23aio-libs-space:matrix.org | |
:alt: Matrix Space β #aio-libs-space:matrix.org | |
Installation | |
------------ | |
.. code-block:: shell | |
pip install async-lru | |
Usage | |
----- | |
This package is a port of Python's built-in `functools.lru_cache <https://docs.python.org/3/library/functools.html#functools.lru_cache>`_ function for `asyncio <https://docs.python.org/3/library/asyncio.html>`_. To better handle async behaviour, it also ensures multiple concurrent calls will only result in 1 call to the wrapped function, with all ``await``\s receiving the result of that call when it completes. | |
.. code-block:: python | |
import asyncio | |
import aiohttp | |
from async_lru import alru_cache | |
@alru_cache(maxsize=32) | |
async def get_pep(num): | |
resource = 'http://www.python.org/dev/peps/pep-%04d/' % num | |
async with aiohttp.ClientSession() as session: | |
try: | |
async with session.get(resource) as s: | |
return await s.read() | |
except aiohttp.ClientError: | |
return 'Not Found' | |
async def main(): | |
for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991: | |
pep = await get_pep(n) | |
print(n, len(pep)) | |
print(get_pep.cache_info()) | |
# CacheInfo(hits=3, misses=8, maxsize=32, currsize=8) | |
# closing is optional, but highly recommended | |
await get_pep.cache_close() | |
asyncio.run(main()) | |
TTL (time-to-live, expiration on timeout) is supported by accepting `ttl` configuration | |
parameter (off by default): | |
.. code-block:: python | |
@alru_cache(ttl=5) | |
async def func(arg): | |
return arg * 2 | |
The library supports explicit invalidation for specific function call by | |
`cache_invalidate()`: | |
.. code-block:: python | |
@alru_cache(ttl=5) | |
async def func(arg1, arg2): | |
return arg1 + arg2 | |
func.cache_invalidate(1, arg2=2) | |
The method returns `True` if corresponding arguments set was cached already, `False` | |
otherwise. | |
Python 3.8+ is required | |
Thanks | |
------ | |
The library was donated by `Ocean S.A. <https://ocean.io/>`_ | |
Thanks to the company for contribution. | |