【发布时间】:2021-03-02 03:28:08
【问题描述】:
我有一个 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-storage-accounts-with-azure-functions-and-event-grid
【问题讨论】:
-
设置函数超时时间如何?
-
这几天你的函数配置有什么变化吗?
-
函数超时已设置为 10 分钟,操作超时发生在大约 5 分钟后。 @Hury Shen,不,我没有进行任何配置更改。
-
请问您最近是否在同一个函数应用中添加了新功能(例如http触发功能或新的定时器触发功能)?
-
@Hury Shen,暂无新增功能
标签: azure azure-functions azure-blob-storage azure-triggers