← 返回首页
make `asyncio.iscoroutinefunction` a deprecated alias of `inspect.iscoroutinefunction` and remove `asyncio.coroutines._is_coroutine` · Issue #94912 · python/cpython · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

make asyncio.iscoroutinefunction a deprecated alias of inspect.iscoroutinefunction and remove asyncio.coroutines._is_coroutine #94912

New issue
New issue

Description

currently asyncio.iscoroutinefunction and inspect.iscoroutinefunction behave differently in confusing and hard to document ways. It's possible to bring them into alignment but I think it would be better to make asyncio.iscoroutinefunction a deprecated alias of inspect.iscoroutinefunction and remove asyncio.coroutines._is_coroutine.

This is now possible with the recent removal of @asyncio.coroutine and support for AsyncMock and other duck-type functions in inspect.iscoroutinefunction

the only caveats are - what should happen to users of the asyncio.coroutines._is_coroutine mark? eg:

@types.coroutine
def _wrap_awaitable(awaitable):
"""Helper for asyncio.ensure_future().
Wraps awaitable (an object with __await__) into a coroutine
that will later be wrapped in a Task by ensure_future().
"""
return (yield from awaitable.__await__())
_wrap_awaitable._is_coroutine = _is_coroutine

and all of these:

Lib/test/test_asyncio/test_base_events.py: m_socket.getaddrinfo._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_reader._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_writer._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_reader._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_writer._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_reader._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_writer._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: m_socket.getaddrinfo._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: m_socket.getaddrinfo._is_coroutine = False Lib/test/test_asyncio/test_base_events.py: self.loop._add_reader._is_coroutine = False Lib/test/test_asyncio/test_selector_events.py: self.loop.add_reader._is_coroutine = False Lib/test/test_asyncio/test_subprocess.py: protocol.connection_made._is_coroutine = False Lib/test/test_asyncio/test_subprocess.py: protocol.process_exited._is_coroutine = False Lib/unittest/mock.py: mock._is_coroutine = asyncio.coroutines._is_coroutine Lib/unittest/mock.py: # iscoroutinefunction() checks _is_coroutine property to say if an Lib/unittest/mock.py: self.__dict__['_is_coroutine'] = asyncio.coroutines._is_coroutine

Metadata

Metadata

Assignees

No one assigned

    Labels

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Done
    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    • Open in GitHub Copilot app

    Footer

    © 2026 GitHub, Inc.