summaryrefslogtreecommitdiffstats
path: root/Lib/multiprocessing/pool.py
diff options
context:
space:
mode:
authorRichard Oudkerk <shibturn@gmail.com>2014-03-23 12:30:54 (GMT)
committerRichard Oudkerk <shibturn@gmail.com>2014-03-23 12:30:54 (GMT)
commit80a5be1d84689a680900ff4900acb2a39ec6d2a8 (patch)
tree7c11e5d9148ac8399a9a651e9aaf61ca2f5df576 /Lib/multiprocessing/pool.py
parenta40675a1a232479bbc2cb9437db265416eeb5b2d (diff)
downloadcpython-80a5be1d84689a680900ff4900acb2a39ec6d2a8.zip
cpython-80a5be1d84689a680900ff4900acb2a39ec6d2a8.tar.gz
cpython-80a5be1d84689a680900ff4900acb2a39ec6d2a8.tar.bz2
Issue #20980: Stop wrapping exception when using ThreadPool.
Diffstat (limited to 'Lib/multiprocessing/pool.py')
-rw-r--r--Lib/multiprocessing/pool.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py
index 74d0875..8832a5c 100644
--- a/Lib/multiprocessing/pool.py
+++ b/Lib/multiprocessing/pool.py
@@ -90,7 +90,8 @@ class MaybeEncodingError(Exception):
return "<MaybeEncodingError: %s>" % str(self)
-def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None):
+def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None,
+ wrap_exception=False):
assert maxtasks is None or (type(maxtasks) == int and maxtasks > 0)
put = outqueue.put
get = inqueue.get
@@ -117,7 +118,8 @@ def worker(inqueue, outqueue, initializer=None, initargs=(), maxtasks=None):
try:
result = (True, func(*args, **kwds))
except Exception as e:
- e = ExceptionWithTraceback(e, e.__traceback__)
+ if wrap_exception:
+ e = ExceptionWithTraceback(e, e.__traceback__)
result = (False, e)
try:
put((job, i, result))
@@ -137,6 +139,8 @@ class Pool(object):
'''
Class which supports an async version of applying functions to arguments.
'''
+ _wrap_exception = True
+
def Process(self, *args, **kwds):
return self._ctx.Process(*args, **kwds)
@@ -220,7 +224,8 @@ class Pool(object):
w = self.Process(target=worker,
args=(self._inqueue, self._outqueue,
self._initializer,
- self._initargs, self._maxtasksperchild)
+ self._initargs, self._maxtasksperchild,
+ self._wrap_exception)
)
self._pool.append(w)
w.name = w.name.replace('Process', 'PoolWorker')
@@ -736,6 +741,7 @@ class IMapUnorderedIterator(IMapIterator):
#
class ThreadPool(Pool):
+ _wrap_exception = False
@staticmethod
def Process(*args, **kwds):