我有一个 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)
在过去的几个月里,这一直对我有用,没有任何问题,但是在过去的两天里,我在存档过程的中途看到了这个错误:
The operation has timed out.
除此之外没有其他有意义的错误消息。如果我通过 UI 手动调用该函数,它将成功归档其余文件。blob 的大小从几 KB 到大约 5 MB 不等,超时错误似乎发生在 2-3 MB 的文件上。一次只运行一个调用,所以我认为我没有超过消耗计划的 1.5GB 内存限制(我python exited with code 137
从过去的内存问题中看到)。当它已经完美运行了几个月时,为什么我突然收到这个错误?
更新
我想我将尝试使用此处找到的方法进行存档,这样我就不必在 Python 中将 blob 内容存储在内存中:https ://www.europeclouds.com/blog/moving-files-between-具有 Azure 功能和事件网格的存储帐户