queue.yaml Reference

Applications define task queues in a configuration file called queue.yaml. You can use queue.yaml to configure both push queues and pull queues. This configuration file is optional for push queues, which have a default queue. Pull queues must be specifically configured in queue.yaml.


The following a basic example that defines a named queue and overrides the default processing rate:

- name: my-push-queue
  rate: 1/s

The following is a more complex example of a queue.yaml configuration that demonstrates setting up task retries and modifying the default processing rate.

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


The queue.yaml file is a YAML file whose root directive is queue. This directive contains zero or more named queues. Each queue definition can specify the following elements:

Element Description
acl (pull queues)

Experimental. Creates an access control list (ACL) for Pull Queues using the Task Queue REST API. The ACL is composed of the specified email addresses. Accepts email addresses only from a Google Account. Enter each email address on its own line as follows:

- name: my-pull-queue
  mode: pull
  # can list, get, lease, delete, and update tasks:
  - user_email: bar@foo.com
  # can insert tasks:
  - writer_email: user@gmail.com
  # can insert tasks, in addition to rights granted by
  # being a user_email above:
  - writer_email: bar@foo.com

For more information, see Defining Pull Queues.

bucket_size (push queues)

Optional. If you don't specify bucket_size for a queue, the default value is 5. We recommend that you set this to larger value because the default size may be too small for many use cases: the recommended size is the processing rate divided by 5 (rate/5).

Task queues use a "token bucket" algorithm for dequeueing tasks. The bucket size limits how fast the queue is processed when many tasks are in the queue and the rate is high. The maximum value for bucket size is 500. This allows you to have a high rate so processing starts shortly after a task is enqueued, but still limit resource usage when many tasks are enqueued in a short period of time.

For more information on the algorithm, see the Wikipedia article on token buckets.

max_concurrent_requests (push queues)

Optional. Sets the maximum number of tasks that can be executed simultaneously from the specified queue. The value is an integer. By default, the limit is 1000 tasks per queue.

Restricting the number of concurrent tasks gives you more control over the queue's rate of execution and can prevent too many tasks from running at once. It can also prevent datastore contention and make resources available for other queues or online processing.


Optional. Identifies the queue mode. This setting defaults to push, which identifies a queue as a push queue. If you wish to use pull queues, set the mode to pull.


Required. The name of the queue. This is the name you specify when you call QueueFactory.getQueue().

A queue name can contain uppercase and lowercase letters, numbers, and hyphens. The maximum length for a queue name is 100 characters.

All apps have a push queue named default. This queue has a preset rate of 5 tasks per second, but you can change this rate by defining a default queue in queue.yaml. If you do not configure a default queue in queue.yaml, the default queue doesn't display in the Google Cloud Platform Console until the first time it is used. You can customize the settings for this queue by defining a queue named default.

rate (push queues)

Required. How often tasks are processed on this queue. The value is a number followed by a slash and a unit of time, where the unit is s for seconds, m for minutes, h for hours, or d for days. For example, the value 5/m says tasks will be processed at a rate of 5 times per minute.

If the number is 0 (such as 0/s), the queue is considered "paused," and no tasks are processed.


Optional. Configures retry attempts for failed tasks. 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 retry parameters can contain the following subelements:

The maximum number of retry attempts for a failed task. If specified with task_age_limit, App Engine retries the task until both limits are reached. If 0 is specified, the task will not be retried. If unspecified, the task is retried indefinitely.
task_age_limit (push queues)
The time limit for retrying a failed task, measured from when the task was first run. The value is a number followed by a unit of time, where the unit is s for seconds, m for minutes, h for hours, or d for days. For example, the value 5d specifies a limit of five days after the task's first execution attempt. If specified with task_retry_limit, App Engine retries the task until both limits are reached.
min_backoff_seconds (push queues)
The minimum number of seconds to wait before retrying a task after it fails.
max_backoff_seconds (push queues)
The maximum number of seconds to wait before retrying a task after it fails.
max_doublings (push queues)
The maximum number of times that the interval between failed task retries will be doubled before the increase becomes constant. The constant is: 2**max_doublings * min_backoff_seconds.
target (push queues)

Optional. A string naming a service/version, a frontend version, or a backend, on which to execute all of the tasks enqueued onto this queue.

The string is prepended to the domain name of your app when constructing the HTTP request for a task. For example, if your app ID is my-app and you set the target to my-version.my-service, the URL hostname will be set to my-version.my-service.my-app.appspot.com.

If target is unspecified, then tasks are invoked on the same version of the application where they were enqueued. So, if you enqueued a task from the default application version without specifying a target on the queue, the task is invoked in the default application version. Note that if the default application version changes between the time that the task is enqueued and the time that it executes, then the task will run in the new default version.

If you are using services along with a dispatch file, your task's HTTP request might be intercepted and re-routed to another service.

The following elements can be specified for all queues within an app:

Element Description

Optional. A string that overrides the default quota storage limit that is available for taskqueue storage (100M). For example:

total_storage_limit: 1.2G
  - name: fooqueue

This quota is part of the application's total storage quota (including the datastore and blobstore quota).

If no suffix is specified, the number that you specify is interpreted as bytes. The following suffixes are supported:

  • B (bytes)
  • K (kilobytes)
  • M (megabytes)
  • G (gigabytes)
  • T (terabytes)

If total_storage_limit exceeds the total disk storage that is available to an application, the limit is clamped.

Send feedback about...

App Engine standard environment for Python