experimental success

This commit is contained in:
Jörn-Michael Miehe 2023-09-08 16:08:10 +00:00
parent 5223efddb4
commit e894aad746

View file

@ -1,38 +1,32 @@
import asyncio
import functools
from contextlib import asynccontextmanager, contextmanager
from io import BytesIO
from typing import AsyncContextManager, AsyncIterator, ContextManager, Iterator
from cache import AsyncLRU
FILES = __file__, "pyproject.toml"
REPS = 3
#
# sync impl
#
def get_buf_sync() -> ContextManager[BytesIO]:
if getattr(get_buf_sync, "inner", None) is None:
@functools.lru_cache
def inner() -> bytes:
def get_bytes_sync(fn) -> bytes:
print("sync open")
with open(__file__, "rb") as file:
with open(fn, "rb") as file:
return file.readline()
setattr(get_buf_sync, "inner", inner)
@contextmanager
def ctx() -> Iterator[BytesIO]:
yield BytesIO(get_buf_sync.inner())
return ctx()
def get_buf_sync(fn) -> BytesIO:
return BytesIO(get_bytes_sync(fn))
def main_sync() -> None:
for _ in range(2):
with get_buf_sync() as buffer:
print(buffer.read())
for fn in FILES:
for _ in range(REPS):
print(get_buf_sync(fn).read())
#
@ -40,28 +34,21 @@ def main_sync() -> None:
#
async def get_buf_async() -> AsyncContextManager[BytesIO]:
if getattr(get_buf_async, "inner", None) is None:
@AsyncLRU()
async def inner() -> bytes:
async def get_bytes_async(fn) -> bytes:
print("async open")
with open(__file__, "rb") as file:
with open(fn, "rb") as file:
return file.readline()
setattr(get_buf_async, "inner", inner)
@asynccontextmanager
async def ctx() -> AsyncIterator[BytesIO]:
yield BytesIO(await get_buf_async.inner())
return ctx()
async def get_buf_async(fn) -> BytesIO:
return BytesIO(await get_bytes_async(fn))
async def main_async() -> None:
for _ in range(2):
async with await get_buf_async() as buffer:
print(buffer.read())
for fn in FILES:
for _ in range(REPS):
print((await get_buf_async(fn)).read())
if __name__ == "__main__":