删除Google云存储中的一个非常大的文件夹

2024-09-30 14:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Google云存储中有一个非常大的文件夹,我正在使用下面的django-python代码删除该文件夹,同时使用Google App Engine在30秒内默认http超时

def deleteStorageFolder(bucketName, folder):
    from google.cloud import storage
    cloudStorageClient = storage.Client()
    bucket = cloudStorageClient.bucket(bucketName)
    logging.info("Deleting : " + folder)
    try:
        bucket.delete_blobs(blobs=bucket.list_blobs(prefix=folder))
    except Exception as e:
        logging.info(str(e.message))

谷歌云希望应用程序一个接一个地请求文件夹中对象的信息,然后一个接一个地删除它们,这真是难以置信

显然,这会由于超时而失败。这里最好的策略是什么

(应该有一种方法,我们可以删除bucket中的父对象,它应该删除背景中某个位置的所有关联子对象,然后我们从模型中删除关联数据。然后Google Storage可以随时删除数据。但是,据我所知,这不是实现的方式)


Tags: 数据对象django代码info文件夹appbucket
2条回答

在客户端库支持批量删除之前,我想有两个简单的选项-请参见https://issuetracker.google.com/issues/142641783

  1. 如果GAE映像包含gsutil cli,则可以在子进程中执行gsutil -m rm ...
  2. 我最喜欢使用gcsfs库而不是G库。默认情况下,它支持批量删除-请参见https://gcsfs.readthedocs.io/en/latest/_modules/gcsfs/core.html#GCSFileSystem.rm

有一个变通办法。您可以通过两个步骤完成此操作

  1. 使用Transfert将要删除的文件“移动”到另一个存储桶中 enter image description here

从您的bucket创建一个transfert,并使用您希望转移到另一个bucket的过滤器(如果需要,创建一个临时过滤器)。选中“传输后从源中删除”复选框 enter image description here

  1. 成功传输后,删除临时存储桶。如果时间太长,你还有另一个解决办法

    • 转到bucket页
    • 点击生命周期 enter image description here
    • 设置一个生命周期,在该生命周期中,您可以删除使用期限为>;0天 enter image description here

在这两种情况下,你们都依赖谷歌云批处理功能,因为你们自己太长太长了

相关问题 更多 >