From a019fae50d9c6fb2fc5847f435892d71a8ebed97 Mon Sep 17 00:00:00 2001 From: Felix Schindler Date: Thu, 16 Jan 2020 15:50:10 +0100 Subject: [PATCH 1/3] use pymor.core.pickle if available --- simdb/db.py | 2 ++ simdb/run.py | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/simdb/db.py b/simdb/db.py index cef7ad3..e55209d 100644 --- a/simdb/db.py +++ b/simdb/db.py @@ -28,6 +28,8 @@ PY2 = sys.version_info.major == 2 try: + from pymor.core.pickle import dumps, load +except ImportError: from cPickle import dumps, load except ImportError: from pickle import dumps, load diff --git a/simdb/run.py b/simdb/run.py index 34c2529..21c0059 100644 --- a/simdb/run.py +++ b/simdb/run.py @@ -30,9 +30,11 @@ import atexit from collections import defaultdict try: - from cPickle import dump + from pymor.core.pickle import dump, PicklingError except ImportError: - from pickle import dump + from cPickle import dump, PicklingError +except ImportError: + from pickle import dump, PicklingError import datetime import os if PY2: From 3039c69e0ebe1c3f9bc02ac60529039897305207 Mon Sep 17 00:00:00 2001 From: Felix Schindler Date: Thu, 16 Jan 2020 15:50:36 +0100 Subject: [PATCH 2/3] give better error messages pickle failures --- simdb/run.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/simdb/run.py b/simdb/run.py index 21c0059..1b423a4 100644 --- a/simdb/run.py +++ b/simdb/run.py @@ -290,7 +290,15 @@ def process_data(v): data = {k: process_data(v) for k, v in _current_dataset_data.items()} with open(os.path.join(_current_dataset, 'DATA'), 'wb') as f: - dump(data, f, protocol=-1) + try: + dump(data, f, protocol=-1) + except PicklingError: + for kk, vv in data.items(): + try: + dump({kk: vv}, f, protocol=-1) + except PicklingError as e: + print(f'could not pickle "{kk}"') + raise e def get_metadata(v): if isinstance(v, np.ndarray): From 0930fa585aea328b053a9d91c74f01953b519fc7 Mon Sep 17 00:00:00 2001 From: Felix Schindler Date: Thu, 16 Jan 2020 15:51:03 +0100 Subject: [PATCH 3/3] allow to manually finish a run (useful in jupyter notebooks) --- simdb/run.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/simdb/run.py b/simdb/run.py index 1b423a4..dbd469f 100644 --- a/simdb/run.py +++ b/simdb/run.py @@ -415,8 +415,7 @@ def dump_failed(filename): _saved_excepthook, sys.excepthook = sys.excepthook, _excepthook -@atexit.register -def _exit_hook(): +def declare_finished(): if _run: finished = datetime.datetime.now() if _current_dataset: @@ -425,3 +424,8 @@ def _exit_hook(): yaml.dump(finished, f) with open(os.path.join(_db_path, 'RUNS', _run, 'FINISHED'), 'wt') as f: yaml.dump(finished, f) + + +@atexit.register +def _exit_hook(): + declare_finished()