bpo-43723: Deprecate camelCase aliases from threading (GH-25174)
The snake_case names have existed since Python 2.6, so there is
no reason to keep the old camelCase names around. One similar
method, threading.Thread.isAlive, was already removed in
Python 3.9 (bpo-37804).
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 933935b..49a4af8 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -154,9 +154,9 @@ def test_various_ops(self):
def test_ident_of_no_threading_threads(self):
# The ident still must work for the main thread and dummy threads.
- self.assertIsNotNone(threading.currentThread().ident)
+ self.assertIsNotNone(threading.current_thread().ident)
def f():
- ident.append(threading.currentThread().ident)
+ ident.append(threading.current_thread().ident)
done.set()
done = threading.Event()
ident = []
@@ -447,13 +447,32 @@ def test_old_threading_api(self):
# Just a quick sanity check to make sure the old method names are
# still present
t = threading.Thread()
- t.isDaemon()
- t.setDaemon(True)
- t.getName()
- t.setName("name")
+ with self.assertWarnsRegex(DeprecationWarning,
+ r'get the daemon attribute'):
+ t.isDaemon()
+ with self.assertWarnsRegex(DeprecationWarning,
+ r'set the daemon attribute'):
+ t.setDaemon(True)
+ with self.assertWarnsRegex(DeprecationWarning,
+ r'get the name attribute'):
+ t.getName()
+ with self.assertWarnsRegex(DeprecationWarning,
+ r'set the name attribute'):
+ t.setName("name")
+
e = threading.Event()
- e.isSet()
- threading.activeCount()
+ with self.assertWarnsRegex(DeprecationWarning, 'use is_set()'):
+ e.isSet()
+
+ cond = threading.Condition()
+ cond.acquire()
+ with self.assertWarnsRegex(DeprecationWarning, 'use notify_all()'):
+ cond.notifyAll()
+
+ with self.assertWarnsRegex(DeprecationWarning, 'use active_count()'):
+ threading.activeCount()
+ with self.assertWarnsRegex(DeprecationWarning, 'use current_thread()'):
+ threading.currentThread()
def test_repr_daemon(self):
t = threading.Thread()
diff --git a/Lib/threading.py b/Lib/threading.py
index ff2624a..4dcf847 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -388,7 +388,16 @@ def notify_all(self):
"""
self.notify(len(self._waiters))
- notifyAll = notify_all
+ def notifyAll(self):
+ """Wake up all threads waiting on this condition.
+
+ This method is deprecated, use notify_all() instead.
+
+ """
+ import warnings
+ warnings.warn('notifyAll() is deprecated, use notify_all() instead',
+ DeprecationWarning, stacklevel=2)
+ self.notify_all()
class Semaphore:
@@ -538,7 +547,16 @@ def is_set(self):
"""Return true if and only if the internal flag is true."""
return self._flag
- isSet = is_set
+ def isSet(self):
+ """Return true if and only if the internal flag is true.
+
+ This method is deprecated, use notify_all() instead.
+
+ """
+ import warnings
+ warnings.warn('isSet() is deprecated, use is_set() instead',
+ DeprecationWarning, stacklevel=2)
+ return self.is_set()
def set(self):
"""Set the internal flag to true.
@@ -1146,15 +1164,47 @@ def daemon(self, daemonic):
self._daemonic = daemonic
def isDaemon(self):
+ """Return whether this thread is a daemon.
+
+ This method is deprecated, use the daemon attribute instead.
+
+ """
+ import warnings
+ warnings.warn('isDaemon() is deprecated, get the daemon attribute instead',
+ DeprecationWarning, stacklevel=2)
return self.daemon
def setDaemon(self, daemonic):
+ """Set whether this thread is a daemon.
+
+ This method is deprecated, use the .daemon property instead.
+
+ """
+ import warnings
+ warnings.warn('setDaemon() is deprecated, set the daemon attribute instead',
+ DeprecationWarning, stacklevel=2)
self.daemon = daemonic
def getName(self):
+ """Return a string used for identification purposes only.
+
+ This method is deprecated, use the name attribute instead.
+
+ """
+ import warnings
+ warnings.warn('getName() is deprecated, get the name attribute instead',
+ DeprecationWarning, stacklevel=2)
return self.name
def setName(self, name):
+ """Set the name string for this thread.
+
+ This method is deprecated, use the name attribute instead.
+
+ """
+ import warnings
+ warnings.warn('setName() is deprecated, set the name attribute instead',
+ DeprecationWarning, stacklevel=2)
self.name = name
@@ -1349,7 +1399,16 @@ def current_thread():
except KeyError:
return _DummyThread()
-currentThread = current_thread
+def currentThread():
+ """Return the current Thread object, corresponding to the caller's thread of control.
+
+ This function is deprecated, use current_thread() instead.
+
+ """
+ import warnings
+ warnings.warn('currentThread() is deprecated, use current_thread() instead',
+ DeprecationWarning, stacklevel=2)
+ return current_thread()
def active_count():
"""Return the number of Thread objects currently alive.
@@ -1361,7 +1420,16 @@ def active_count():
with _active_limbo_lock:
return len(_active) + len(_limbo)
-activeCount = active_count
+def activeCount():
+ """Return the number of Thread objects currently alive.
+
+ This function is deprecated, use active_count() instead.
+
+ """
+ import warnings
+ warnings.warn('activeCount() is deprecated, use active_count() instead',
+ DeprecationWarning, stacklevel=2)
+ return active_count()
def _enumerate():
# Same as enumerate(), but without the lock. Internal use only.