【发布时间】:2021-12-16 16:58:21
【问题描述】:
我有一个存储桶,里面有很多大文件(每个 500mb)。有时我需要加载多个文件,按名称引用。我一直在使用blob.download_as_string()函数逐个下载文件,但是速度非常慢,所以我想尝试并行下载。
我找到了gcloud-aio-storage 包,但是文档有点稀疏,尤其是download 函数。
我更愿意将文件下载/存储在内存中,而不是下载到本地机器然后上传到脚本。
这是我拼凑起来的,虽然我似乎无法让它发挥作用。我不断收到超时错误。 我做错了什么?
注意:使用 python 3.7,以及所有其他软件包中的最新版本。
test_download.py
from gcloud.aio.storage import Storage
import aiohttp
import asyncio
async def gcs_download(session, bucket_name, file, storage):
async with session:
bucket = storage.get_bucket(bucket_name)
blob = await bucket.get_blob(file)
return await blob.download()
async def get_gcsfiles_async(bucket_name, gcs_files):
async with aiohttp.ClientSession() as session:
storage = Storage(session=session)
coros = (gcs_download(session, bucket_name, file, storage) for file in gcs_files)
return await asyncio.gather(*coros)
那么我调用/传入值的方式如下:
import test_download as test
import asyncio
bucket_name = 'my_bucket_name'
project_name = 'my_project_name' ### Where do I reference this???
gcs_files = ['bucket_folder/some-file-2020-10-06.txt',
'bucket_folder/some-file-2020-10-07.txt',
'bucket_folder/some-file-2020-10-08.txt']
result = asyncio.run(test.get_gcsfiles_async(bucket_name, gcs_files))
我们将不胜感激!
这里是相关问题,虽然有两点需要注意:Google Storage python api download in parallel
- 当我从批准的答案运行代码时,它最终会卡住并且永远不会下载
- 这是在
gcloud-aio-storage包发布之前,可能没有利用“最佳”当前方法。
【问题讨论】:
标签: python-3.x google-cloud-storage python-asyncio aiohttp