我有一个django应用程序,在该应用程序上我上传了几个大文件。 在我看来,我想对这些文件执行异步任务:
def my_view(request):
Thread(target=_my_task, args=[request.FILES]).start())
return redirect(my_url)
问题是,当我在线程中使用文件时,主请求已完成,请求对象以及其中包含的InMemoryUploadedFile对象被删除,并且出现了IO异常:
ValueError: I/O operation on closed file.
如何在不将这些文件写入我的文件系统的情况下强制保留这些文件?
答案 0 :(得分:1)
如何在不将这些文件写入我的文件系统的情况下强制保留这些文件?
简短的回答:您不能。
最长的答案:您可以传递文件内容而不是文件对象,但这充其量是不安全的(如果出现任何问题,您将丢失数据)并且麻烦(当您切换到适当的任务队列-线程不是在Django中运行异步任务的适当方法-至少可以说,将兆字节或数千兆字节的binaray数据作为任务参数传递是行不通的。
TL; DR:以一种或另一种方式(最好是在文件系统上)将文件保存到磁盘,并使用适当的异步任务队列。