Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/aio-libs/async-lru
Simple LRU cache for asyncio
https://github.com/aio-libs/async-lru
asyncio lru lru-cache
Last synced: about 1 month ago
JSON representation
Simple LRU cache for asyncio
- Host: GitHub
- URL: https://github.com/aio-libs/async-lru
- Owner: aio-libs
- License: mit
- Created: 2017-02-20T14:06:47.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2024-10-23T19:31:53.000Z (about 2 months ago)
- Last Synced: 2024-10-29T15:46:08.610Z (about 2 months ago)
- Topics: asyncio, lru, lru-cache
- Language: Python
- Homepage: https://pypi.org/p/async-lru
- Size: 403 KB
- Stars: 712
- Watchers: 21
- Forks: 53
- Open Issues: 7
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.rst
- License: LICENSE
Awesome Lists containing this project
README
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.orgInstallation
------------.. code-block:: shell
pip install async-lru
Usage
-----This package is a port of Python's built-in `functools.lru_cache `_ function for `asyncio `_. 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 * 2The 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 + arg2func.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. `_
Thanks to the company for contribution.