New submission from Tzu-ping Chung <uranu...@gmail.com>:
Currently, decorating a coroutine with cached_property would cache the coroutine itself. But this is not useful in any way since a coroutine cannot be awaited multiple times. Running this code: import asyncio import functools class A: @functools.cached_property async def hello(self): return 'yo' async def main(): a = A() print(await a.hello) print(await a.hello) asyncio.run(main()) produces: yo Traceback (most recent call last): File "t.py", line 15, in <module> asyncio.run(main()) File "/lib/python3.10/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete return future.result() File "t.py", line 12, in main print(await a.hello) RuntimeError: cannot reuse already awaited coroutine The third-party cached_property package, on the other hand, detects a coroutine and caches its result instead. I feel this is a more useful behaviour. https://github.com/pydanny/cached-property/issues/85 ---------- components: Library (Lib) messages: 412422 nosy: uranusjr priority: normal severity: normal status: open title: Support decorating a coroutine with functools.cached_property type: enhancement versions: Python 3.10, Python 3.11, Python 3.8, Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46622> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com