私は次のクラスを持っています:
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()
私のMacbookProCore i7、8Gb RAMでは、300mbのアップロードされたファイルの実行に約20秒かかる場合がありますvideo_file.save()
/tmp
この遅延は、ファイルの永続的な場所へのディスクコピー操作に関連していると思われますか?watch ls -l
ターゲットディレクトリで実行することでこれを証明しました。実行するとすぐvideo_file.save()
に、ファイルが表示され、遅延全体で大きくなることがわかります。
このファイル転送の遅延をなくす方法はありますか?ファイルをターゲットファイル名に直接アップロードするか、コピーする代わりに元のファイルを移動するだけですか?ただし、サイト全体でのアップロード操作はこれだけではないため、ソリューションをこのモデルにローカライズする必要があります。
アドバイスありがとうございます!
アップデート:
移動ではなくコピーをサポートするためのさらなる証拠です。アップロード中に、アップロードの進行状況に正確に対応するpythonから書き込まれwatch lsof
たファイルを確認できます。/private/var/folders/...
アップロードが完了すると、時間の経過とともに大きくなる最終的なファイルの場所を示す別のlsofエントリが表示されます。それが完了すると、両方のエントリが消えます。