如何使用 Google Cloud Platform 的 python 库关闭为 Gcp-Storage 和 pub-sub 创建的连接对象

How to close connection objects created for Gcp-Storage and pub-sub using Google Cloud Platform's python libraries

我的应用程序正在使用以下方法创建发布-订阅对象:

google.cloud import pubsub_v1
publisher_client = pubsub_v1.PublisherClient     

和存储对象使用:

from google.cloud import storage
client = storage.Client()

我怎样才能快速优雅地 close/release 这些连接对象以便可以大规模使用?

如果与 google 服务交互所需的功能,则客户端对象位于内存对象中,但它们不会打开网络连接,因为它们已创建并保持打开状态。因此,创建许多对象可能不是问题,因为它们在内存分配中,就像变量一样。

我已经测试过在循环中创建数千个客户端,完全没有问题。

但是,如果您愿意,可以关闭。基本上只需调用以下内容即可删除它们:

google.cloud import pubsub_v1
from google.cloud import storage

publisher_client = pubsub_v1.PublisherClient()     
client = storage.Client()

del publisher_client
del client

还建议在删除对象之前调用以下函数:

publisher_client.stop():

Asynchronously sends all outstanding messages and prevents future calls to publish(). Method should be invoked prior to deleting this Client() object in order to ensure that no pending messages are lost.

client.close():

关于它的文档不是很清楚,但接缝会关闭任何正在读取以上传的文件。


您在生产环境中遇到的与 GOOGLE_APPLICATION_CREDENTIALS 环境变量相关的另一个问题是因为您必须在生产环境中设置它。

  • 在 GCP IAM 控制台上创建服务帐户;
  • 添加适当的权限(Cloud Store Editor,Pub/Sub Editor (?))
  • 在其上创建一个密钥 (json) 下载并设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向 /path/of/key/key.json
  • 更多详细信息在此 documentation