我有以下课程:
class VideoFile(models.Model):
media_file = models.FileField(upload_to=update_filename, null=True)
当我尝试使用以下请求向其上传大文件(从 100mb 到 2Gb)时,在上传过程之后以及在此过程中可能需要很长时间VideoFile.save()
。
def upload(request):
video_file = VideoFile.objects.create(uploader=request.user.profile)
video_file.media_file = uploaded_file
video_file.save()
在我的 Macbook Pro Core i7、8Gb RAM 上,一个 300mb 的上传文件可能需要大约 20 秒才能运行video_file.save()
/tmp
我怀疑这种延迟与从文件永久位置进行磁盘复制操作有关?我已经通过watch ls -l
在目标目录上运行证明了这一点,一旦video_file.save()
运行,我可以看到文件出现并在整个延迟过程中增长。
有没有办法消除这种文件传输延迟?通过将文件直接上传到目标文件名,或者只是移动原始文件而不是复制?然而,这不是整个站点的唯一上传操作,因此任何解决方案都需要本地化到此模型。
感谢您的任何建议!
更新:
只是进一步的证据来支持副本而不是移动,我可以watch lsof
在上传期间看到一个/private/var/folders/...
从 python 写入的文件,该文件完全映射到上传进度。上传完成后,最终文件位置会出现另一个 lsof 条目,该位置会随着时间的推移而增长。完成后,两个条目都会消失。