summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2011-07-27 22:28:28 (GMT)
committerÉric Araujo <merwok@netwok.org>2011-07-27 22:28:28 (GMT)
commit0cdd4454f37a55bad9c80b6dc1ee328161df4496 (patch)
tree275ba983baf566c07f6a952142a8041d276ac178
parent9bce311ea4f58ec04cab356a748e173ecfea381c (diff)
downloadcpython-0cdd4454f37a55bad9c80b6dc1ee328161df4496.zip
cpython-0cdd4454f37a55bad9c80b6dc1ee328161df4496.tar.gz
cpython-0cdd4454f37a55bad9c80b6dc1ee328161df4496.tar.bz2
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.
-rw-r--r--Lib/multiprocessing/dummy/__init__.py13
-rw-r--r--Lib/threading.py29
-rw-r--r--Misc/NEWS7
3 files changed, 15 insertions, 34 deletions
diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py
index c4933d9..60add92 100644
--- a/Lib/multiprocessing/dummy/__init__.py
+++ b/Lib/multiprocessing/dummy/__init__.py
@@ -51,7 +51,7 @@ import itertools
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 DummyProcess(threading.Thread):
#
#
-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
index 9681f02..222e5d9 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -172,10 +172,7 @@ class _RLock(_Verbose):
_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 @@ class _Condition(_Verbose):
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 @@ class _Semaphore(_Verbose):
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 @@ class Thread(_Verbose):
# 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
index 3cd8018..7c81190 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -237,6 +237,13 @@ Core and Builtins
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.