【发布时间】:2021-10-17 15:33:14
【问题描述】:
我正在使用烧瓶服务器在请求后返回处理后的图像文件。我正在使用谷歌云运行,根据我对并发性的理解,我应该删除文件以减少启动实例的内存使用量。为此,我选择在 'with' 语句中使用 NamedTemporaryFile() - 我的理解是默认行为是,一旦您退出 'with' 语句,临时文件就会被删除。
这是我必须返回处理后的图像的代码。
@app.route('/')
def hello():
"image processing"
with NamedTemporaryFile() as temp:
cv2.imwrite(str(temp.name),img_processed)
return send_file(str(temp.name), mimetype='image/png')
但是,由于我试图在'with'语句中返回函数,临时文件是否仍会被删除? 我也正确使用 NamedTemporaryFile() 吗?我见过的例子使用 temp.write 但由于我使用 cv2.imwrite 使用 temp.name 是我想出的方法。 有没有更好的方法在烧瓶 send_file 之后删除文件? - 我读过关于使用@after_this_request 但Delete an uploaded file after downloading it from Flask 说它可能不一致。
更新:要将 cv2.imwrite 与 NamedTemporaryFile() 一起使用,我必须使用以下命令指定临时文件的扩展名:
NamedTemporaryFile(suffix='.png')
否则代码工作正常。
【问题讨论】:
-
NamedTemporaryFile() 究竟返回了什么?
-
对不起,应该更清楚地说明返回是我的烧瓶应用程序功能的一部分。我现在就编辑它
-
我明白 - 我的意思是 NamedTemporaryFile 函数返回什么。
-
它来自临时文件库。 "返回一个可以用作临时存储区域的类文件对象"
标签: python flask google-cloud-run