Permalink
Fetching contributors…
Cannot retrieve contributors at this time
84 lines (62 sloc) 2.26 KB
from abc import ABCMeta, abstractmethod, abstractproperty
class ParslExecutor(metaclass=ABCMeta):
"""Define the strict interface for all Executor classes.
This is a metaclass that only enforces concrete implementations of
functionality by the child classes.
In addition to the listed methods, a ParslExecutor instance must always
have a member field:
label: str - a human readable label for the executor, unique
with respect to other executors.
"""
@abstractmethod
def start(self, *args, **kwargs):
"""Start the executor.
Any spin-up operations (for example: starting thread pools) should be performed here.
"""
pass
@abstractmethod
def submit(self, *args, **kwargs):
"""Submit.
We haven't yet decided on what the args to this can be,
whether it should just be func, args, kwargs or be the partially evaluated
fn
"""
pass
@abstractmethod
def scale_out(self, *args, **kwargs):
"""Scale out method.
We should have the scale out method simply take resource object
which will have the scaling methods, scale_out itself should be a coroutine, since
scaling tasks can be slow.
"""
pass
@abstractmethod
def scale_in(self, count):
"""Scale in method.
Cause the executor to reduce the number of blocks by count.
We should have the scale in method simply take resource object
which will have the scaling methods, scale_in itself should be a coroutine, since
scaling tasks can be slow.
"""
pass
@abstractmethod
def shutdown(self, *args, **kwargs):
"""Shutdown the executor.
This includes all attached resources such as workers and controllers.
"""
pass
@abstractproperty
def scaling_enabled(self):
"""Specify if scaling is enabled.
The callers of ParslExecutors need to differentiate between Executors
and Executors wrapped in a resource provider
"""
pass
@property
def run_dir(self):
"""Path to the run directory.
"""
return self._run_dir
@run_dir.setter
def run_dir(self, value):
self._run_dir = value