cpython: 57d6265beaaa (original) (raw)
Mercurial > cpython
changeset 77140:57d6265beaaa
Issue #12091: simplify ApplyResult and MapResult with threading.Event Patch by Charles-François Natali [#12091]
Richard Oudkerk shibturn@gmail.com | |
---|---|
date | Fri, 25 May 2012 13:26:53 +0100 |
parents | 9373ca8c6c55 |
children | 59567c117b0e |
files | Lib/multiprocessing/pool.py |
diffstat | 1 files changed, 9 insertions(+), 30 deletions(-)[+] [-] Lib/multiprocessing/pool.py 39 |
line wrap: on
line diff
--- a/Lib/multiprocessing/pool.py +++ b/Lib/multiprocessing/pool.py @@ -526,32 +526,26 @@ class Pool(object): class ApplyResult(object): def init(self, cache, callback, error_callback):
self._cond = threading.Condition(threading.Lock())[](#l1.7)
self._event = threading.Event()[](#l1.8) self._job = next(job_counter)[](#l1.9) self._cache = cache[](#l1.10)
self._ready = False[](#l1.11) self._callback = callback[](#l1.12) self._error_callback = error_callback[](#l1.13) cache[self._job] = self[](#l1.14)
return self._ready[](#l1.17)
return self._event.is_set()[](#l1.18)
assert self._ready[](#l1.21)
assert self.ready()[](#l1.22) return self._success[](#l1.23)
self._cond.acquire()[](#l1.26)
try:[](#l1.27)
if not self._ready:[](#l1.28)
self._cond.wait(timeout)[](#l1.29)
finally:[](#l1.30)
self._cond.release()[](#l1.31)
self._event.wait(timeout)[](#l1.32)
def get(self, timeout=None): self.wait(timeout)
if not self._ready:[](#l1.36)
if not self.ready():[](#l1.37) raise TimeoutError[](#l1.38) if self._success:[](#l1.39) return self._value[](#l1.40)
@@ -564,12 +558,7 @@ class ApplyResult(object): self._callback(self._value) if self._error_callback and not self._success: self._error_callback(self._value)
self._cond.acquire()[](#l1.45)
try:[](#l1.46)
self._ready = True[](#l1.47)
self._cond.notify()[](#l1.48)
finally:[](#l1.49)
self._cond.release()[](#l1.50)
self._event.set()[](#l1.51) del self._cache[self._job][](#l1.52)
# @@ -586,7 +575,7 @@ class MapResult(ApplyResult): self._chunksize = chunksize if chunksize <= 0: self._number_left = 0
self._ready = True[](#l1.59)
self._event.set()[](#l1.60) else:[](#l1.61) self._number_left = length//chunksize + bool(length % chunksize)[](#l1.62)
@@ -599,24 +588,14 @@ class MapResult(ApplyResult): if self._callback: self._callback(self._value) del self._cache[self._job]
self._cond.acquire()[](#l1.68)
try:[](#l1.69)
self._ready = True[](#l1.70)
self._cond.notify()[](#l1.71)
finally:[](#l1.72)
self._cond.release()[](#l1.73)
self._event.set()[](#l1.74) else:[](#l1.75) self._success = False[](#l1.76) self._value = result[](#l1.77) if self._error_callback:[](#l1.78) self._error_callback(self._value)[](#l1.79) del self._cache[self._job][](#l1.80)
self._cond.acquire()[](#l1.81)
try:[](#l1.82)
self._ready = True[](#l1.83)
self._cond.notify()[](#l1.84)
finally:[](#l1.85)
self._cond.release()[](#l1.86)
self._event.set()[](#l1.87)