Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Typing: Document performance pitfalls of protocols decorated with @runtime_checkable #102936

Closed
AlexWaygood opened this issue Mar 22, 2023 · 0 comments
Labels
docs Documentation in the Doc dir topic-typing

Comments

@AlexWaygood
Copy link
Member

AlexWaygood commented Mar 22, 2023

Documentation

The following two calls look similar, but the second is dramatically slow compared to the first:

from typing import SupportsInt

isinstance(3, int)
isinstance(3, SupportsInt)

The reason for the slowness is because of _ProtocolMeta.__instancecheck__, which makes calling isinstance() against any runtime-checkable protocol pretty slow. It's possible we can find ways of optimising _ProtocolMeta.__instancecheck__, but whatever we do, it is likely to remain substantially slower to call isinstance() against runtime-checkable protocols than it is to call isinstance() against "normal" classes. This is often pretty surprising for users, so one of the consensus points in python/typing#1363 was that this should be better documented.

Linked PRs

@AlexWaygood AlexWaygood added docs Documentation in the Doc dir topic-typing labels Mar 22, 2023
AlexWaygood added a commit that referenced this issue Mar 23, 2023
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Mar 23, 2023
…ecorated with `@runtime_checkable` (pythonGH-102937)

(cherry picked from commit 58d2b30)

Co-authored-by: Alex Waygood <[email protected]>
miss-islington pushed a commit to miss-islington/cpython that referenced this issue Mar 23, 2023
…ecorated with `@runtime_checkable` (pythonGH-102937)

(cherry picked from commit 58d2b30)

Co-authored-by: Alex Waygood <[email protected]>
miss-islington added a commit that referenced this issue Mar 23, 2023
…ed with `@runtime_checkable` (GH-102937)

(cherry picked from commit 58d2b30)

Co-authored-by: Alex Waygood <[email protected]>
miss-islington added a commit that referenced this issue Mar 23, 2023
…ed with `@runtime_checkable` (GH-102937)

(cherry picked from commit 58d2b30)

Co-authored-by: Alex Waygood <[email protected]>
Fidget-Spinner pushed a commit to Fidget-Spinner/cpython that referenced this issue Mar 27, 2023
warsaw pushed a commit to warsaw/cpython that referenced this issue Apr 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs Documentation in the Doc dir topic-typing
Projects
None yet
Development

No branches or pull requests

1 participant