我正在使用Django 1.5.5。
我有一个允许用户将巨大的Excel文件上传到数据库的视图。首先,我将上传的文件与锁定文件一起存储在/tmp/
文件夹中,以禁止同时访问数据库。
现在假设用户正处于上传过程中(最多需要15分钟),如果服务器突然结束(出于任何原因),我如何捕获此异常以便删除所有临时文件?
答案 0 :(得分:0)
现在假设用户正处于上传过程中(需要 最多15分钟),如果服务器突然结束(出于任何原因),如何 我是否捕获此异常,以便我可以删除所有临时的 文件?
您的应用程序不会出现此类异常,因为您的应用程序已经超时(这是实际错误)。
您的服务器应该自动清除/tmp
,如果不是,那么您需要修复它,否则您将很快耗尽磁盘空间。
要解决此问题,您需要将Excel文件的上传与显示表单的页面分开,这样您的应用程序就不会让客户端等待响应。使用类似django-sticky-uploads
的内容,它会在后台上传您的文件。
您可能还需要考虑使用celery
,这是一种在“背景”中运行代码的方法。这样它就不会让用户等待响应。如果文件处理需要很长时间(长度超过30秒),这将非常有用。
最后 - 如果处理Excel文件时发生任何事情,您可能希望使用transactions来确保数据库处于干净状态。