gpt4 book ai didi

python - 如何清理与 send_file 一起使用的临时文件?

转载 作者:太空狗 更新时间:2023-10-29 17:15:44 24 4
gpt4 key购买 nike

我目前正在开发一个服务器端 json 接口(interface),其中有几个临时文件在请求期间被操作。

我当前在请求结束时清理这些文件的解决方案如下所示:

@app.route("/method",methods=['POST'])
def api_entry():
with ObjectThatCreatesTemporaryFiles() as object:
object.createTemporaryFiles()
return "blabalbal"

在这种情况下,清理在 object.__exit__() 中进行

但是在一些情况下我需要返回一个临时文件给客户端,在这种情况下代码如下所示:

@app.route("/method",methods=['POST'])
def api_entry():
with ObjectThatCreatesTemporaryFiles() as object:
object.createTemporaryFiles()
return send_file(object.somePath)

这目前不起作用,因为当我进行清理时, flask 正在读取文件并将其发送到客户端。¨我该如何解决这个问题?

编辑:我忘了提到文件位于临时目录中。

最佳答案

我使用的方法是在响应完成后使用弱引用删除文件。

import shutil
import tempfile
import weakref

class FileRemover(object):
def __init__(self):
self.weak_references = dict() # weak_ref -> filepath to remove

def cleanup_once_done(self, response, filepath):
wr = weakref.ref(response, self._do_cleanup)
self.weak_references[wr] = filepath

def _do_cleanup(self, wr):
filepath = self.weak_references[wr]
print('Deleting %s' % filepath)
shutil.rmtree(filepath, ignore_errors=True)

file_remover = FileRemover()

在 flask 调用中我有:

@app.route('/method')
def get_some_data_as_a_file():
tempdir = tempfile.mkdtemp()
filepath = make_the_data(dir_to_put_file_in=tempdir)
resp = send_file(filepath)
file_remover.cleanup_once_done(resp, tempdir)
return resp

这是一种非常普遍的方法,并且在我使用过的三种不同的 Python Web 框架中都适用。

关于python - 如何清理与 send_file 一起使用的临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344538/

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