diff --git a/aiocache/decorators.py b/aiocache/decorators.py index 66b0f8af..463fe437 100644 --- a/aiocache/decorators.py +++ b/aiocache/decorators.py @@ -185,12 +185,15 @@ def __init__(self, lease=2, **kwargs): super().__init__(**kwargs) self.lease = lease - async def decorator(self, f, *args, **kwargs): + async def decorator( + self, f, *args, cache_read=True, cache_write=True, aiocache_wait_for_write=True, **kwargs + ): key = self.get_cache_key(f, args, kwargs) - value = await self.get_from_cache(key) - if value is not None: - return value + if cache_read: + value = await self.get_from_cache(key) + if value is not None: + return value async with RedLock(self.cache, key, self.lease): value = await self.get_from_cache(key) @@ -199,7 +202,11 @@ async def decorator(self, f, *args, **kwargs): result = await f(*args, **kwargs) - await self.set_in_cache(key, result) + if cache_write: + if aiocache_wait_for_write: + await self.set_in_cache(key, result) + else: + asyncio.ensure_future(self.set_in_cache(key, result)) return result