Commit ec4b174d authored by Raymond Hettinger's avatar Raymond Hettinger

Issue #17385: Fix quadratic behavior in threading.Condition

parent 720da571
......@@ -10,6 +10,12 @@ except ImportError:
from time import time as _time
from traceback import format_exc as _format_exc
from _weakrefset import WeakSet
try:
from _itertools import islice as _slice
from _collections import deque as _deque
except ImportError:
from itertools import islice as _islice
from collections import deque as _deque
# Note regarding PEP 8 compliant names
# This threading model was originally inspired by Java, and inherited
......@@ -146,7 +152,7 @@ class Condition:
self._is_owned = lock._is_owned
except AttributeError:
pass
self._waiters = []
self._waiters = _deque()
def __enter__(self):
return self._lock.__enter__()
......@@ -217,7 +223,7 @@ class Condition:
if not self._is_owned():
raise RuntimeError("cannot notify on un-acquired lock")
__waiters = self._waiters
waiters = __waiters[:n]
waiters = _deque(_islice(__waiters, n))
if not waiters:
return
for waiter in waiters:
......
......@@ -277,6 +277,9 @@ Core and Builtins
Library
-------
_ Issue #17385: Fix quadratic behavior in threading.Condition. The FIFO
queue now uses a deque instead of a list.
- Issue #14645: The email generator classes now produce output using the
specified linesep throughout. Previously if the prolog, epilog, or
body were stored with a different linesep, that linesep was used. This
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment