Parsl internal bugs silently squashed then hangs
@benclifford reported an alarming bug in which a error in the parsl code does not throw an exception but is silently squashed. This is followed by the code hanging and not making progress. To make the situation even worse the strategy thread continues to run, giving the impression that parsl is doing something. 

My suspicion is the the exception silently kills some thread, and that goes unreported.

The string formatting bug added here (in memoization code) -> https://github.com/Parsl/parsl/tree/pr238-related-example reproduces this issue with a test script that hits this memoization code. 

Some recommendations:
1. Better exception handling
2. Logs to show thread-ids so that we can see when threads have gone missing
diff --git a/parsl/__init__.py b/parsl/__init__.py
index 475173df..b6f94431 100644
--- a/parsl/__init__.py
+++ b/parsl/__init__.py
@@ -71,6 +71,12 @@ def set_stream_logger(name='parsl', level=logging.DEBUG, format_string=None):
     handler.setFormatter(formatter)
     logger.addHandler(handler)
 
+    # Concurrent.futures errors are also of interest, as exceptions
+    # which propagate out of the top of a callback are logged this way
+    # and then discarded. (see #240)
+    futures_logger = logging.getLogger("concurrent.futures")
+    futures_logger.addHandler(handler)
+
 
 def set_file_logger(filename, name='parsl', level=logging.DEBUG, format_string=None):
     """Add a stream log handler.
@@ -95,6 +101,11 @@ def set_file_logger(filename, name='parsl', level=logging.DEBUG, format_string=N
     handler.setFormatter(formatter)
     logger.addHandler(handler)
 
+    # see note in set_stream_logger for notes about logging
+    # concurrent.futures
+    futures_logger = logging.getLogger("concurrent.futures")
+    futures_logger.addHandler(handler)
+
 
 class NullHandler(logging.Handler):
     """Setup default logging to /dev/null since this is library."""
['parsl/__init__.py']