Github user mxmrlv commented on a diff in the pull request:

    https://github.com/apache/incubator-ariatosca/pull/207#discussion_r150787274
  
    --- 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 --
    
    if `print_exceptions` is just being passed to the parent constructor, 
consider using *args, **kwargs and passing those instead


---

Reply via email to