Name | Description |
---|---|
@executor | The decorator used to define executors. Defines an ExecutorDefinition . |
ExecutorDefinition | An executor definition. |
Executors are responsible for executing steps within a job run. Once a run has launched and the process for the run (the run worker) has been allocated and started, the executor assumes responsibility for execution. Executors can range from single-process serial executors all the way to managing per-step computational resources with a sophisticated control plane.
Every job has an executor. The default executor is the multiprocess_executor
, which executes each step in its own process. You can choose the executor for a job by supplying an ExecutorDefinition
to the executor_def
parameter of @job
or GraphDefinition.to_job
.
Executing a job via JobDefinition.execute_in_process
, overrides the job's executor and uses in_process_executor
instead.
Example executors include:
in_process_executor
: Execution plan executes serially within the [run worker](/deployment/overview#job-execution-flow) itself.multiprocess_executor
: Each step executes within its own spawned process. Has configurable level of parallelism.dask_executor
: Executes each step within a dask task.celery_executor
: Executes each step within a celery task.docker_executor
: Executes each step within a Docker container.k8s_job_executor
: Executes each step within an ephemeral kubernetes pod.celery_k8s_job_executor
: Executes each step within a ephemeral kubernetes pod, using celery as a control plane for prioritization and queuing.celery_docker_executor
: Executes each step within a Docker container, using celery as a control plane for prioritization and queueing.The executor system is pluggable, and it is possible to write your own executor to target a different execution substrate. This is not well-documented, and the internal APIs continue to be in flux.