(original) (raw)

changeset: 71560:7f606223578a user: Éric Araujo merwok@netwok.org date: Thu Jul 28 00:28:28 2011 +0200 files: Lib/multiprocessing/dummy/__init__.py Lib/threading.py Misc/NEWS description: 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. diff -r 5966eeb0457d -r 7f606223578a Lib/multiprocessing/dummy/__init__.py --- a/Lib/multiprocessing/dummy/__init__.py Wed Jul 27 18:29:31 2011 +0200 +++ b/Lib/multiprocessing/dummy/__init__.py Thu Jul 28 00:28:28 2011 +0200 @@ -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 -r 5966eeb0457d -r 7f606223578a Lib/threading.py --- a/Lib/threading.py Wed Jul 27 18:29:31 2011 +0200 +++ b/Lib/threading.py Thu Jul 28 00:28:28 2011 +0200 @@ -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 -r 5966eeb0457d -r 7f606223578a Misc/NEWS --- a/Misc/NEWS Wed Jul 27 18:29:31 2011 +0200 +++ b/Misc/NEWS Thu Jul 28 00:28:28 2011 +0200 @@ -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. /merwok@netwok.org