[Python-checkins] cpython: Remove indirection in threading (issue #10968).

eric.araujo python-checkins at python.org
Fri Jul 29 14:35:23 CEST 2011


http://hg.python.org/cpython/rev/7f606223578a
changeset:   71560:7f606223578a
user:        Éric Araujo <merwok at netwok.org>
date:        Thu Jul 28 00:28:28 2011 +0200
summary:
  Remove indirection in threading (issue #10968).

The public names (Thread, Condition, etc.) used to be factory functions
returning instances of hidden classes (_Thread, _Condition, etc.),
because (if Guido recalls correctly) this code pre-dates the ability to
subclass extension types.

It is now possible to inherit from Thread and other classes, without
having to import the private underscored names like multiprocessing did.

A doc update will follow: a patch is under discussion on the issue.

files:
  Lib/multiprocessing/dummy/__init__.py |  13 +------
  Lib/threading.py                      |  29 +++-----------
  Misc/NEWS                             |   7 +++
  3 files changed, 15 insertions(+), 34 deletions(-)


diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py
--- a/Lib/multiprocessing/dummy/__init__.py
+++ b/Lib/multiprocessing/dummy/__init__.py
@@ -51,7 +51,7 @@
 from multiprocessing import TimeoutError, cpu_count
 from multiprocessing.dummy.connection import Pipe
 from threading import Lock, RLock, Semaphore, BoundedSemaphore
-from threading import Event
+from threading import Event, Condition
 from queue import Queue
 
 #
@@ -84,17 +84,6 @@
 #
 #
 
-class Condition(threading._Condition):
-    # XXX
-    if sys.version_info < (3, 0):
-        notify_all = threading._Condition.notify_all.__func__
-    else:
-        notify_all = threading._Condition.notify_all
-
-#
-#
-#
-
 Process = DummyProcess
 current_process = threading.current_thread
 current_process()._children = weakref.WeakKeyDictionary()
diff --git a/Lib/threading.py b/Lib/threading.py
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -172,10 +172,7 @@
 _PyRLock = _RLock
 
 
-def Condition(*args, **kwargs):
-    return _Condition(*args, **kwargs)
-
-class _Condition(_Verbose):
+class Condition(_Verbose):
 
     def __init__(self, lock=None, verbose=None):
         _Verbose.__init__(self, verbose)
@@ -308,10 +305,7 @@
     notifyAll = notify_all
 
 
-def Semaphore(*args, **kwargs):
-    return _Semaphore(*args, **kwargs)
-
-class _Semaphore(_Verbose):
+class Semaphore(_Verbose):
 
     # After Tim Peters' semaphore class, but not quite the same (no maximum)
 
@@ -366,25 +360,19 @@
         self.release()
 
 
-def BoundedSemaphore(*args, **kwargs):
-    return _BoundedSemaphore(*args, **kwargs)
-
-class _BoundedSemaphore(_Semaphore):
+class BoundedSemaphore(Semaphore):
     """Semaphore that checks that # releases is <= # acquires"""
     def __init__(self, value=1, verbose=None):
-        _Semaphore.__init__(self, value, verbose)
+        Semaphore.__init__(self, value, verbose)
         self._initial_value = value
 
     def release(self):
         if self._value >= self._initial_value:
             raise ValueError("Semaphore released too many times")
-        return _Semaphore.release(self)
+        return Semaphore.release(self)
 
 
-def Event(*args, **kwargs):
-    return _Event(*args, **kwargs)
-
-class _Event(_Verbose):
+class Event(_Verbose):
 
     # After Tim Peters' event class (without is_posted())
 
@@ -918,10 +906,7 @@
 
 # The timer class was contributed by Itamar Shtull-Trauring
 
-def Timer(*args, **kwargs):
-    return _Timer(*args, **kwargs)
-
-class _Timer(Thread):
+class Timer(Thread):
     """Call a function after a specified number of seconds:
 
     t = Timer(30.0, f, args=[], kwargs={})
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -237,6 +237,13 @@
 Library
 -------
 
+- Issue #10968: Remove indirection in threading.  The public names (Thread,
+  Condition, etc.) used to be factory functions returning instances of hidden
+  classes (_Thread, _Condition, etc.), because (if Guido recalls correctly) this
+  code pre-dates the ability to subclass extension types.  It is now possible to
+  inherit from Thread and other classes, without having to import the private
+  underscored names like multiprocessing did.
+
 - Issue #9723: Add shlex.quote functions, to escape filenames and command
   lines.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list