0

我有一个 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.

如何强制这些文件的持久性而不将它们写入我的文件系统?

4

1 回答 1

1

如何强制这些文件的持久性而不将它们写入我的文件系统?

简短的回答:你不能。

最长的答案:您可以传递文件内容而不是文件对象,但这充其量是不安全的(如果出现任何问题,您会丢失数据)并且很麻烦(当您切换到正确的任务队列时 - 线程不是正确的在 Django 中运行异步任务的方法——你会发现将兆字节或千兆字节的二进制数据作为任务参数传递并不奏效,至少可以这么说)。

TL;DR:以一种或另一种方式将文件保存到磁盘(最好在文件系统上,这就是它的用途)并使用适当的异步任务队列。

于 2018-07-03T12:01:27.177 回答