Python Client for Google Cloud Pub / Sub

imageimageimage

Google Cloud Pub / Sub is a fully-managed real-time messaging service thatallows you to send and receive messages between independent applications. Youcan leverage Cloud Pub/Sub’s flexibility to decouple systems and componentshosted on Google Cloud Platform or elsewhere on the Internet. By building onthe same technology Google uses, Cloud Pub / Sub is designed to provide “atleast once” delivery at low latency with on-demand scalability to 1 millionmessages per second (and beyond).

Publisher applications can send messages to atopic and other applicationscan subscribe to that topic to receive the messages. By decoupling senders andreceivers, Google Cloud Pub/Sub allows developers to communicate betweenindependently written applications.

Quick Start

In order to use this library, you first need to go through the following steps:

  1. Select or create a Cloud Platform project.

  2. Enable billing for your project.

  3. Enable the Google Cloud Pub / Sub API.

  4. Setup Authentication.

Installation

Install this library in avirtualenv using pip.virtualenv is a tool tocreate isolated Python environments. The basic problem it addresses is one ofdependencies and versions, and indirectly permissions.

Withvirtualenv, it’s possible to install this library without needing systeminstall permissions, and without clashing with the installed systemdependencies.

Supported Python Versions

Python >= 3.7

Deprecated Python Versions

Python <= 3.6.

The last version of this library compatible with Python 2.7 is google-cloud-pubsub==1.7.0.

Mac/Linux

pip install virtualenvvirtualenv <your-env>source <your-env>/bin/activate<your-env>/bin/pip install google-cloud-pubsub

Windows

pip install virtualenvvirtualenv <your-env><your-env>\Scripts\activate<your-env>\Scripts\pip.exe install google-cloud-pubsub

Example Usage

Publishing

To publish data to Cloud Pub/Sub you must create a topic, and then publishmessages to it

import osfrom google.cloud import pubsub_v1publisher = pubsub_v1.PublisherClient()topic_name = 'projects/{project_id}/topics/{topic}'.format(    project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),    topic='MY_TOPIC_NAME',  # Set this to something appropriate.)publisher.create_topic(name=topic_name)future =publisher.publish(topic_name, b'My first message!', spam='eggs')future.result()

To learn more, consult thepublishing documentation.

Subscribing

To subscribe to data in Cloud Pub/Sub, you create a subscription based onthe topic, and subscribe to that, passing a callback function.

import osfrom google.cloud import pubsub_v1topic_name = 'projects/{project_id}/topics/{topic}'.format(    project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),    topic='MY_TOPIC_NAME',  # Set this to something appropriate.)subscription_name = 'projects/{project_id}/subscriptions/{sub}'.format(    project_id=os.getenv('GOOGLE_CLOUD_PROJECT'),    sub='MY_SUBSCRIPTION_NAME',  # Set this to something appropriate.)def callback(message):    print(message.data)    message.ack()with pubsub_v1.SubscriberClient() as subscriber:    subscriber.create_subscription(        name=subscription_name, topic=topic_name)    future = subscriber.subscribe(subscription_name, callback)

The future returned by the call tosubscriber.subscribe can be used toblock the current thread until a given condition obtains:

try:    future.result()except KeyboardInterrupt:    future.cancel()

It is also possible to pull messages in a synchronous (blocking) fashion. Tolearn more about subscribing, consult thesubscriber documentation.

Authentication

It is possible to specify the authentication method to use with the Pub/Subclients. This can be done by providing an explicitCredentials instance. Supportfor various authentication methods is available from thegoogle-auth library.

For example, to use JSON Web Tokens, provide agoogle.auth.jwt.Credentials instance:

import jsonfrom google.auth import jwtservice_account_info = json.load(open("service-account-info.json"))audience = "https://pubsub.googleapis.com/google.pubsub.v1.Subscriber"credentials = jwt.Credentials.from_service_account_info(    service_account_info, audience=audience)subscriber = pubsub_v1.SubscriberClient(credentials=credentials)# The same for the publisher, except that the "audience" claim needs to be adjustedpublisher_audience = "https://pubsub.googleapis.com/google.pubsub.v1.Publisher"credentials_pub = credentials.with_claims(audience=publisher_audience)publisher = pubsub_v1.PublisherClient(credentials=credentials_pub)

Versioning

This library followsSemantic Versioning.

It is currently in major version one (1.y.z), which means that the public API should be considered stable.

Contributing

Contributions to this library are always welcome and highly encouraged.

See theCONTRIBUTING doc for more information on how to get started.

Community

The best place to ask questions is via Stackoverflow:https://stackoverflow.com/questions/tagged/google-cloud-pubsub

License

Apache 2.0 - Seethe LICENSE for more information.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-10-30 UTC.