> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tilebox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Context.submit_subtask

```python theme={"system"}
def ExecutionContext.submit_subtask(
  task: Task,
  depends_on: list[FutureTask] = None,
  cluster: str | None = None,
  max_retries: int = 0,
  optional: bool = False
) -> FutureTask
```

Submit a [subtask](/workflows/concepts/tasks#subtasks-and-task-composition) from a currently executing task.

## Parameters

<ParamField path="task" type="Task">
  The task to submit as a subtask.
</ParamField>

<ParamField path="depends_on" type="list[FutureTask]">
  An optional list of tasks already submitted within the same context that this subtask depends on.
</ParamField>

<ParamField path="cluster" type="str">
  An optional [cluster slug](/workflows/concepts/clusters#managing-clusters) for running the subtask. If not provided, the subtask runs on the same cluster as the parent task.
</ParamField>

<ParamField path="max_retries" type="int">
  Specify the maximum number of [retries](/workflows/concepts/tasks#retry-handling) for the subtask in case of failure. The default is 0.
</ParamField>

<ParamField path="optional" type="bool">
  Whether the subtask is [optional](/workflows/concepts/tasks#optional-tasks). If `True`, the subtask will not fail the job if it fails. Tasks that depend on this task will still execute even if this task failed. The default is `False`.
</ParamField>

## Returns

A `FutureTask` object that represents the submitted subtask. Can be used to set up dependencies between tasks.

<RequestExample>
  ```python Python theme={"system"}
  # within the execute method of a Task:
  subtask = context.submit_subtask(MySubtask())
  dependent_subtask = context.submit_subtask(
      MyOtherSubtask(), depends_on=[subtask]
  )
  gpu_task = context.submit_subtask(
      MyGPUTask(),
      cluster="gpu-cluster-slug"
  )
  flaky_task = context.submit_subtask(
      MyFlakyTask(),
      max_retries=5
  )
  optional_task = context.submit_subtask(
      MyOptionalTask(),
      optional=True
  )
  ```
</RequestExample>
