Python Client for Google Cloud Pub / Sub
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:
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-pubsubWindows
pip install virtualenvvirtualenv <your-env><your-env>\Scripts\activate<your-env>\Scripts\pip.exe install google-cloud-pubsubExample 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.