- Better error handling
This commit is contained in:
@@ -311,7 +311,9 @@ class parpool(object):
|
|||||||
""" Get an item from the queue and store it. """
|
""" Get an item from the queue and store it. """
|
||||||
try:
|
try:
|
||||||
r = self.Qo.get(True, 0.02)
|
r = self.Qo.get(True, 0.02)
|
||||||
if r[0]:
|
if r[0] is None:
|
||||||
|
self.res[r[1]] = dill.loads(r[2])
|
||||||
|
elif r[0] is False:
|
||||||
pfmt = warnings.formatwarning
|
pfmt = warnings.formatwarning
|
||||||
warnings.formatwarning = lambda message, *args: '{}\n'.format(message)
|
warnings.formatwarning = lambda message, *args: '{}\n'.format(message)
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
@@ -321,7 +323,14 @@ class parpool(object):
|
|||||||
warnings.formatwarning = pfmt
|
warnings.formatwarning = pfmt
|
||||||
fun, args, kwargs = [dill.loads(f[1]) for f in r[2][1:]]
|
fun, args, kwargs = [dill.loads(f[1]) for f in r[2][1:]]
|
||||||
r = (False, r[1], fun(dill.loads(r[2][0]), *args, **kwargs))
|
r = (False, r[1], fun(dill.loads(r[2][0]), *args, **kwargs))
|
||||||
self.res[r[1]] = dill.loads(r[2])
|
self.res[r[1]] = r[2]
|
||||||
|
else:
|
||||||
|
err = dill.loads(r[2])
|
||||||
|
pfmt = warnings.formatwarning
|
||||||
|
warnings.formatwarning = lambda message, *args: '{}\n'.format(message)
|
||||||
|
warnings.warn('Warning, error occurred in iteration {}:\n{}'.format(r[1], err))
|
||||||
|
warnings.formatwarning = pfmt
|
||||||
|
self.res[r[1]] = err
|
||||||
if not self.bar is None:
|
if not self.bar is None:
|
||||||
self.bar.update()
|
self.bar.update()
|
||||||
self._qbar_update()
|
self._qbar_update()
|
||||||
@@ -426,14 +435,14 @@ class parpool(object):
|
|||||||
fun = self.get_from_cache(*Fun)
|
fun = self.get_from_cache(*Fun)
|
||||||
args = self.get_from_cache(*Args)
|
args = self.get_from_cache(*Args)
|
||||||
kwargs = self.get_from_cache(*Kwargs)
|
kwargs = self.get_from_cache(*Kwargs)
|
||||||
self.Qo.put((False, i, dumps(fun(dill.loads(n), *args, **kwargs), recurse=True)))
|
self.Qo.put((None, i, dumps(fun(dill.loads(n), *args, **kwargs), recurse=True)))
|
||||||
except multiprocessing.queues.Empty:
|
except multiprocessing.queues.Empty:
|
||||||
continue
|
continue
|
||||||
except:
|
except:
|
||||||
if self.debug:
|
if self.debug:
|
||||||
self.Qo.put((False, i, format_exc()))
|
self.Qo.put((True, i, dumps(format_exc(), recurse=True)))
|
||||||
else:
|
else:
|
||||||
self.Qo.put((True, i, (n, Fun, Args, Kwargs)))
|
self.Qo.put((False, i, (n, Fun, Args, Kwargs)))
|
||||||
terminator = dill.loads(self.terminator)
|
terminator = dill.loads(self.terminator)
|
||||||
if not terminator is None:
|
if not terminator is None:
|
||||||
terminator()
|
terminator()
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name="parfor",
|
name="parfor",
|
||||||
version="2021.2.0",
|
version="2021.3.0",
|
||||||
author="Wim Pomp",
|
author="Wim Pomp",
|
||||||
author_email="wimpomp@gmail.com",
|
author_email="wimpomp@gmail.com",
|
||||||
description="A package to mimic the use of parfor as done in Matlab.",
|
description="A package to mimic the use of parfor as done in Matlab.",
|
||||||
|
|||||||
Reference in New Issue
Block a user