Skip to main content

Simple LRU cache for asyncio

Project description

info:

Simple lru cache for asyncio

https://travis-ci.com/aio-libs/async_lru.svg?branch=master https://img.shields.io/pypi/v/async_lru.svg https://codecov.io/gh/aio-libs/async_lru/branch/master/graph/badge.svg Matrix Room — #aio-libs:matrix.org Matrix Space — #aio-libs-space:matrix.org

Installation

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 awaits receiving the result of that call when it completes.

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):

@alru_cache(ttl=5)
async def func(arg):
    return arg * 2

The library supports explicit invalidation for specific function call by cache_invalidate():

@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.

Thanks to the company for contribution.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

async-lru-2.0.3.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

async_lru-2.0.3-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file async-lru-2.0.3.tar.gz.

File metadata

  • Download URL: async-lru-2.0.3.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for async-lru-2.0.3.tar.gz
Algorithm Hash digest
SHA256 b714c9d1415fca4e264da72a9e2abc66880ce7430e03a973341f88ea4c0d4869
MD5 41277c60ade30fb27e6ba385eee9a530
BLAKE2b-256 1010c2f791f7b14652a02d9cf1a11808a27053511681bbb432d6901d7dc9dae6

See more details on using hashes here.

File details

Details for the file async_lru-2.0.3-py3-none-any.whl.

File metadata

  • Download URL: async_lru-2.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.4

File hashes

Hashes for async_lru-2.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 00c0a8899c20b9c88663a47732689ff98189c9fa08ad9f734d7722f934d250b1
MD5 7c8396de9651ecba82da4254a0fb0987
BLAKE2b-256 657e06ed5a62dd348c5d94b0bed1be495aec9772e418af296ce4c75266391297

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page