Go 1.11 has reached end of support
and will be
deprecated
on January 31, 2026. After deprecation, you won't be able to deploy Go 1.11
applications, even if your organization previously used an organization policy to
re-enable deployments of legacy runtimes. Your existing Go
1.11 applications will continue to run and receive traffic after their
deprecation date. We
recommend that you
migrate to the latest supported version of Go.
Using Pull Queues in Go
Stay organized with collections
Save and categorize content based on your preferences.
This page provides an overview of pull queues in the App Engine
standard environment.
In push queues tasks are delivered to a worker service
based on the queue's configuration. In pull queues the worker service must ask
the queue for tasks. The queue responds by allowing that worker unique access
to process the task for a specified period of time, which is called a lease.

Using pull queues, you can also group related tasks using tags and then configure your
worker to pull multiple tasks with a certain tag all at once. This process is
called batching.
If a worker cannot process a task before its lease expires, it can either renew the
lease or let it expire, at which point another worker can acquire it. Once the
work associated with a task is complete, the worker must delete it.
Using pull queues requires your code to handle some functions that are automated
in push queues:
- Scaling your workers
- Your code needs to scale the number of workers based on
processing volume. If your code does not handle scaling, you risk
wasting computing resources if there are no tasks to process; you also risk
latency if you have too many tasks to process.
- Deleting the tasks
- Your code also needs to explicitly delete tasks after processing.
In push queues, App Engine deletes the tasks for you. If your worker does
not delete pull queue tasks after processing, another worker will re-process
the task. This wastes computing resources and risks errors if tasks are
not idempotent.
Pull queues in the App Engine standard environment are created by setting a property in a
configuration file called queue.yaml
.
Pull queue workflow
Workers that process tasks from pull queues must be defined within a service that runs
in the App Engine standard environment.
The workflow is as follows:
- You create a pull queue, using
queue.yaml
.
- You create tasks and add them to the queue.
- The worker you have created leases the task, using
TaskQueue.
- App Engine sends task data to the worker in the lease response.
- The worker processes the task. If the task fails to execute before the lease
expires, the worker can modify the lease duration. If the lease expires, the
task will be available to be leased to another worker.
- After a task is processed successfully, the worker deletes it.
What's next
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-07 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003ePull queues in the App Engine standard environment require worker services to actively request tasks, in contrast to push queues where tasks are automatically delivered.\u003c/p\u003e\n"],["\u003cp\u003eWorkers in pull queues operate on tasks with a lease, a designated period of exclusive access, after which the task can be processed by another worker if not completed.\u003c/p\u003e\n"],["\u003cp\u003ePull queues enable task batching through the use of tags, allowing workers to retrieve multiple related tasks simultaneously.\u003c/p\u003e\n"],["\u003cp\u003eUnlike push queues, pull queue implementations necessitate manual scaling of workers and explicit task deletion by the worker service after completion to avoid resource waste or errors.\u003c/p\u003e\n"],["\u003cp\u003eThe workflow for pull queues involves creating a queue via \u003ccode\u003equeue.yaml\u003c/code\u003e, adding tasks, leasing tasks to a worker, processing, potentially modifying the lease duration, and finally, deleting the completed task.\u003c/p\u003e\n"]]],[],null,[]]