Duplicate log lines when using IPP
The following code fragment emits log lines to STDERR with the default format style even though no logging is requested. I suspect that `ipyparallel` is doing something dirty.

    from parsl import DataFlowKernel
    from parsl.configs.local import localIPP as config

    dfk = DataFlowKernel(config=config)
    dfk.cleanup()

The above code with the minor change of using threads will not emit the log lines.


    from parsl import DataFlowKernel
    from parsl.configs.local import localThreads as config

    dfk = DataFlowKernel(config=config)
    dfk.cleanup()


Please help test by running this with the latest parsl code. 
diff --git a/parsl/dataflow/strategy.py b/parsl/dataflow/strategy.py
index c9910eb6..47b77a71 100644
--- a/parsl/dataflow/strategy.py
+++ b/parsl/dataflow/strategy.py
@@ -116,6 +116,8 @@ class Strategy(object):
         self.strategies = {None: self._strategy_noop, 'simple': self._strategy_simple}
 
         self.strategize = self.strategies[self.config.strategy]
+        self.logger_flag = False
+        self.prior_loghandlers = set(logging.getLogger().handlers)
 
         logger.debug("Scaling strategy: {0}".format(self.config.strategy))
 
@@ -129,6 +131,20 @@ class Strategy(object):
             - kind (Not used)
         """
 
+    def unset_logging(self):
+        """ Mute newly added handlers to the root level, right after calling executor.status
+        """
+        if self.logger_flag is True:
+            return
+
+        root_logger = logging.getLogger()
+
+        for hndlr in root_logger.handlers:
+            if hndlr not in self.prior_loghandlers:
+                hndlr.setLevel(logging.ERROR)
+
+        self.logger_flag = True
+
     def _strategy_simple(self, tasks, *args, kind=None, **kwargs):
         """Peek at the DFK and the executors specified.
 
@@ -143,9 +159,6 @@ class Strategy(object):
         KWargs:
             - kind (Not used)
         """
-        # Add logic to check executors
-        # for task in tasks :
-        #    if self.dfk.tasks[task]:
 
         for label, executor in self.dfk.executors.items():
             if not executor.scaling_enabled:
@@ -155,6 +168,7 @@ class Strategy(object):
             active_tasks = executor.executor.outstanding
 
             status = executor.status()
+            self.unset_logging()
 
             # FIXME we need to handle case where provider does not define these
             # FIXME probably more of this logic should be moved to the provider
['parsl/dataflow/strategy.py']