2024-05-21 17:13:47 发布
网友
如果我们有一个大文件,有一种技术可以读取和处理它的块。在
假设我在一个请求中收到了一个文件(我看到它是InMemoryFile对象),并想读取它的内容。如果我使用read()一次读取所有内容会有什么危害,还是最好使用块来读取?在
更新:
我还不清楚的是:如果我们收到一个请求(带有inmemory对象),这不意味着文件已经在内存中了吗?我看不到其他地方可以存放。如果它已经在内存中,那么.read()会发生什么变化?在
在上传文件时,Django总是为您提供一个file-类的对象。如果文件不是太大,它将为您提供内存中的对象,如果它的太大,将首先流式传输到磁盘。在
见Where uploaded data is stored:
By default, if an uploaded file is smaller than 2.5 megabytes, Django will hold the entire contents of the upload in memory. This means that saving the file involves only a read from memory and a write to disk and thus is very fast.
通过总是给你一个类似于文件的对象,你不必调整你的代码以适应内存中变量的特殊情况,但是你不必忍受从磁盘读取大文件所带来的性能损失。在
对于内存中的文件对象,^{} method将只返回整个文件内容。对于较大的文件,您将得到一系列足够小的块,以便进行有效的处理。在
如果不使用字符串执行其他操作,则从内存中的文件对象读取不会实际创建新的字符串;因为字符串是不可变的,因此可以安全地共享它。在
在上传文件时,Django总是为您提供一个file-类的对象。如果文件不是太大,它将为您提供内存中的对象,如果它的太大,将首先流式传输到磁盘。在
见Where uploaded data is stored:
通过总是给你一个类似于文件的对象,你不必调整你的代码以适应内存中变量的特殊情况,但是你不必忍受从磁盘读取大文件所带来的性能损失。在
对于内存中的文件对象,^{} method 将只返回整个文件内容。对于较大的文件,您将得到一系列足够小的块,以便进行有效的处理。在
如果不使用字符串执行其他操作,则从内存中的文件对象读取不会实际创建新的字符串;因为字符串是不可变的,因此可以安全地共享它。在
相关问题 更多 >
编程相关推荐