gpt4 book ai didi

用于计时器触发 blob 存档的 Azure Functions "The operation has timed out."

转载 作者:行者123 更新时间:2023-12-03 02:31:38 25 4
gpt4 key购买 nike

我有一个每天运行一次的 Python Azure Functions 计时器触发器,并将文件从通用 v2 热存储容器归档到通用 v2 冷存储容器。我正在使用 Linux 消费计划。代码如下所示:

container = ContainerClient.from_connection_string(conn_str=hot_conn_str, 
container_name=hot_container_name)
blob_list = container.list_blobs(name_starts_with = hot_data_dir)
files = []
for blob in blob_list:
files.append(blob.name)
for file in files:
blob_from = BlobClient.from_connection_string(conn_str=hot_conn_str,
container_name=hot_container_name,
blob_name=file)
data = blob_from.download_blob()
blob_to = BlobClient.from_connection_string(conn_str=cold_conn_str,
container_name=cold_container_name,
blob_name=f'archive/{file}')
try:
blob_to.upload_blob(data.readall())
except ResourceExistsError:
logging.debug(f'file already exists: {file}')
except ResourceNotFoundError:
logging.debug(f'file does not exist: {file}')
container.delete_blob(blob=file)

在过去的几个月里,这对我来说一直有效,没有任何问题,但在过去的两天里,我在存档过程中看到了这个错误:
操作已超时。
除此之外没有其他有意义的错误消息。如果我通过 UI 手动调用该函数,它将成功归档其余文件。 Blob 的大小范围从几 KB 到大约 5 MB,超时错误似乎发生在 2-3MB 的文件上。一次只运行一个调用,所以我认为我没有超过消耗计划的 1.5GB 内存限制(我已经看到 python 由于代码 137 中的内存问题退出了过去的)。为什么我突然收到此错误,而它已经完美运行了几个月?
更新
我想我将尝试使用此处找到的方法进行存档,这样我就不必将 blob 内容存储在 Python 的内存中:https://www.europeclouds.com/blog/moving-files-between-storage-accounts-with-azure-functions-and-event-grid

最佳答案

仅从评论中总结解决方案以供其他社区引用:

正如评论中提到的,OP使用 start_copy_from_url()方法来实现与解决方法相同的要求。

start_copy_from_url()可以直接将文件从原始blob处理到目标blob,它比使用data = blob_from.download_blob()临时存储文件要快得多然后将数据上传到目标blob。

关于用于计时器触发 blob 存档的 Azure Functions "The operation has timed out.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64900251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com