[issue38225] iscoroutinefunction broken with cython - allow tagging of functions as async?

Andrew Svetlov report at bugs.python.org
Fri Sep 20 04:47:04 EDT 2019


Andrew Svetlov <andrew.svetlov at gmail.com> added the comment:

I think `func.__awaitable__ = True` can serve all possible situations.

We need it for async mocks (now the library use flawless `_is_coroutine` approach. 

`__awaitable__` can also cover cases where a regular function returns awaitable object or there is a class with `def __await__(self)` method, `functools.partial` -- all of them are awaitable.

Async functions can be modified to provide the property out of the box.

Regarding the question "is a check for awaitableness a good design or not"?
I agree that a check for awaitableness is useless *just before* calling the function.
There is another very useful case where the check is important: registering a callback for later usage.
For example, we have a web server framework. It is built around a mapping of URL paths to async functions, e.g. path('/hello', say_hello) in Django style. It's crucial to check if say_hello() is an async function *on the application configuration stage*, not on viewing the particular http://localhost/hello page in a browser.

So, I think an official protocol makes a lot of sense, let's implement it in 3.9

----------

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue38225>
_______________________________________


More information about the Python-bugs-list mailing list