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. 


---

Reply via email to