- Better error handling

This commit is contained in:
Wim Pomp
2021-03-05 22:27:00 +01:00
parent 61f1429543
commit 6cce9e9b8e
2 changed files with 15 additions and 6 deletions

View File

@@ -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()

View File

@@ -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.",