<br />

<br />


> [!NOTE]
> **Note:** To upgrade App Engine Push Queues to Cloud Tasks without making code changes, [upgrade your App Engine services SDK
> to the latest version](https://docs.cloud.google.com/appengine/migration-center/standard/python/migrating-push-queues-upgrade-sdk) (Preview).

Push tasks being processed via a task queue can fail for many reasons. If a handler
fails to execute a task (and therefore returns any HTTP status code outside of
the range 200--299), App Engine retries the task until it succeeds.

By default, the system gradually reduces the retry rate to avoid overloading your application with too many
requests, but schedules retry attempts to recur at a maximum of once per hour
until the task succeeds.

<br />

> [!IMPORTANT]
> **Important:** Retry options can be configured for the queue as well specified on the [`Task`](https://docs.cloud.google.com/appengine/docs/standard/python3/reference/services/bundled/google/appengine/api/taskqueue/Task) object. When both are specified, the latter takes precedence.

## Retrying tasks

You can customize your own scheme for task retries by
adding the [retry
parameters](https://docs.cloud.google.com/appengine/docs/standard/reference/queueref#retry_parameters)
element in [`` `queue.yaml` ``](https://docs.cloud.google.com/appengine/docs/standard/reference/queueref). This
addition allows you to specify the maximum number of times to retry failed tasks
in a specific queue. You can also set a time limit for retry attempts and
control the interval between attempts.

The following example demonstrates various retry scenarios:

- In `fooqueue`, tasks are retried up to seven times and for up to two days from the first execution attempt. After both limits are passed, it fails permanently.
- In `barqueue`, App Engine attempts to retry tasks, increasing the interval linearly between each retry until reaching the maximum backoff and retrying indefinitely at the maximum interval (so the intervals between requests are 10s, 20s, 30s, ..., 190s, 200s, 200s, ...).
- In `bazqueue`, the retry interval starts at 10s, then doubles three times, then increases linearly, and finally retries indefinitely at the maximum interval (so the intervals between requests are 10s, 20s, 40s, 80s, 160s, 240s, 300s, 300s, ...).

      queue:
      - name: fooqueue
        rate: 1/s
        retry_parameters:
          task_retry_limit: 7
          task_age_limit: 2d
      - name: barqueue
        rate: 1/s
        retry_parameters:
          min_backoff_seconds: 10
          max_backoff_seconds: 200
          max_doublings: 0
      - name: bazqueue
        rate: 1/s
        retry_parameters:
          min_backoff_seconds: 10
          max_backoff_seconds: 300
          max_doublings: 3

## What's next

- Learn more about the [task queue parameters](https://docs.cloud.google.com/appengine/docs/standard/reference/queueref).