-
Notifications
You must be signed in to change notification settings - Fork 434
[MRG] Fix exception handling in nested parallel calls #696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
4f95bdc
to
37e9d1e
Compare
Codecov Report
@@ Coverage Diff @@
## master #696 +/- ##
==========================================
- Coverage 95.12% 95.08% -0.05%
==========================================
Files 40 40
Lines 5663 5692 +29
==========================================
+ Hits 5387 5412 +25
- Misses 276 280 +4
Continue to review full report at Codecov.
|
84446f9
to
a7fc8f4
Compare
When doing nested parallel calls, all exception would be mapped to the generic JoblibException therefore loosing the original exception type information (e.g. ValueError). Furthermore Python 3 already has a builtin __cause__ exception nesting system that is used by default to trace exception that occured on a remote worker process. The combination of the Python 3 __cause__ nesting and the Joblib system would yield overwhelmingly verbose and redundant exception reports. To fix those two problems, we: - disable useless exception wrapping under Python 3 to only rely on the built-in nesting mechanism; - fix nested exception wrapping under Python 2 to preserve type information.
a7fc8f4
to
2ecb9e1
Compare
I had a quick chat with @GaelVaroquaux about this PR. He seemed not opposed to the general idea. As it's very easy to revert in case of a problem, let me merge this to make it part of the next release. |
* tag '0.12': (116 commits) Release 0.12 typo typo typo ENH add initializer limiting n_threads for C-libs (joblib#701) DOC better parallel docstring (joblib#704) [MRG] Nested parallel call thread bomb mitigation (joblib#700) MTN vendor loky2.1.3 (joblib#699) Make it possible to configure the reusable executor workers timeout (joblib#698) MAINT increase timeouts to make test more robust on travis DOC: use the .joblib extension instead of .pkl (joblib#697) [MRG] Fix exception handling in nested parallel calls (joblib#696) Fix skip test lz4 not installed (joblib#695) [MRG] numpy_pickle: several enhancements (joblib#626) Introduce Parallel.__call__ backend callbacks (joblib#689) Add distributed on readthedocs (joblib#686) Support registration of external backends (joblib#655) [MRG] Add a dask.distributed example (joblib#613) ENH use cloudpickle to pickle interactively defined callable (joblib#677) CI freeze the version of sklearn0.19.1 and scipy1.0.1 (joblib#685) ...
* releases: (121 commits) Release 0.12.1 fix kwonlydefaults key error in filter_args (joblib#715) MNT fix some "undefined name" flake8 warnings (joblib#713). from importlib import reload for Python 3 (joblib#675) MTN vendor loky2.1.4 (joblib#708) Release 0.12 typo typo typo ENH add initializer limiting n_threads for C-libs (joblib#701) DOC better parallel docstring (joblib#704) [MRG] Nested parallel call thread bomb mitigation (joblib#700) MTN vendor loky2.1.3 (joblib#699) Make it possible to configure the reusable executor workers timeout (joblib#698) MAINT increase timeouts to make test more robust on travis DOC: use the .joblib extension instead of .pkl (joblib#697) [MRG] Fix exception handling in nested parallel calls (joblib#696) Fix skip test lz4 not installed (joblib#695) [MRG] numpy_pickle: several enhancements (joblib#626) Introduce Parallel.__call__ backend callbacks (joblib#689) ...
When doing nested parallel calls, all exception would be mapped to the generic
JoblibException
therefore losing the original exception type information (e.g.ValueError
).Furthermore, Python 3 already has a builtin
__cause__
exception nesting system that is used by default to trace exception that occurred on a remote worker process. The combination of the Python 3__cause__
nesting and the Joblib system yields overwhelmingly verbose and redundant exception reports.To fix those two problems, we: