Github user aviyoop commented on a diff in the pull request: https://github.com/apache/incubator-ariatosca/pull/207#discussion_r151408981 --- Diff: aria/utils/threading.py --- @@ -93,7 +92,104 @@ def sum(arg1, arg2): print executor.returns """ - _CYANIDE = object() # Special task marker used to kill worker threads. + def __init__(self, print_exceptions=False): + self.print_exceptions = print_exceptions + + def submit(self, func, *args, **kwargs): + """ + Submit a task for execution. + + The task will be called ASAP on the next available worker thread in the pool. + + :raises ExecutorException: if cannot be submitted + """ + raise NotImplementedError + + def close(self): + """ + Blocks until all current tasks finish execution and all worker threads are dead. + + You cannot submit tasks anymore after calling this. + + This is called automatically upon exit if you are using the ``with`` keyword. + """ + pass + + def drain(self): + """ + Blocks until all current tasks finish execution, but leaves the worker threads alive. + """ + pass + + @property + def returns(self): + """ + The returned values from all tasks, in order of submission. + """ + return () + + @property + def exceptions(self): + """ + The raised exceptions from all tasks, in order of submission. + """ + return () + + def raise_first(self): + """ + If exceptions were thrown by any task, then the first one will be raised. + + This is rather arbitrary: proper handling would involve iterating all the exceptions. + However, if you want to use the "raise" mechanism, you are limited to raising only one of + them. + """ + + exceptions = self.exceptions + if exceptions: + raise exceptions[0] + + def __enter__(self): + return self + + def __exit__(self, the_type, value, traceback): + pass + + +class BlockingExecutor(Executor): + """ + Executes tasks in the current thread. + """ + + def __init__(self, print_exceptions=False): + super(BlockingExecutor, self).__init__(print_exceptions=print_exceptions) --- End diff -- In contrary to Max, since the `Executor` class already has `print_exceptions=False` in its `__init__`, why is it needed here? just call the super `__init__`, and then set attributes as you wish.
---