Bug report
In the main Python branch, creating a threading.Event is slightly slower than it was in 3.10:
I ran a simple benchmark on the main branch (built with --enable-optimizations):
../cpython/python -m pyperf timeit -s 'from threading import Event' 'e = Event()'
.....................
Mean +- std dev: 1.59 us +- 0.02 us
And on 3.10:
../cpython3.10/python -m pyperf timeit -s 'from threading import Event' 'e = Event()'
.....................
Mean +- std dev: 1.52 us +- 0.02 us
When initializing an Event, it creates a Condition via Condition(Lock()). The Condition's __init__() then has to catch 3 exceptions in these blocks:
try:
self._release_save = lock._release_save
except AttributeError:
pass
try:
self._acquire_restore = lock._acquire_restore
except AttributeError:
pass
try:
self._is_owned = lock._is_owned
except AttributeError:
pass
My understanding is that the new zero-cost exceptions make try/except blocks significantly faster when an exception isn't thrown, but don't help when the exception is actually thrown.
For Condition objects, I think it would likely be easy to avoid this minor slowdown by using hasattr() instead of the try/except blocks, and it would also be more concise.
Your environment
- CPython versions tested on: 3.10, 3.12
- Operating system and architecture: Ubuntu 20.04, x86_64
Bug report
In the main Python branch, creating a
threading.Eventis slightly slower than it was in 3.10:I ran a simple benchmark on the main branch (built with
--enable-optimizations):And on 3.10:
When initializing an
Event, it creates aConditionviaCondition(Lock()). TheCondition's__init__()then has to catch 3 exceptions in these blocks:My understanding is that the new zero-cost exceptions make
try/exceptblocks significantly faster when an exception isn't thrown, but don't help when the exception is actually thrown.For
Conditionobjects, I think it would likely be easy to avoid this minor slowdown by usinghasattr()instead of thetry/exceptblocks, and it would also be more concise.Your environment