New submission from Tzu-ping Chung <[email protected]>:
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 <[email protected]>
<https://bugs.python.org/issue46622>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com