【发布时间】:2021-10-14 01:16:08
【问题描述】:
假设我有一个 Django 应用程序,它从用户那里获取帖子并使用 API 调用将它们上传到第三方存储。
现在,这些用户仅在每天的特定时间段内访问服务器,假设时间为 11:00 到 11:20。最大请求数可达 3000(最少 2500 个),即在 20 分钟内将向服务器发出 3000 个 POST 请求。每个请求都会使用 API 将 5-10 mb 的文件发布到第三方存储。我计算了这个 POST 到 API 的平均时间是 5 秒(平均)。处理此 POST 请求的 Django 视图的返回响应在文件上传发生时停止。
现在,如果我以这样一种方式设置 celery,当用户在服务器上进行 POST 时,我会验证该帖子并将上传部分移交给 celery,同时我的 Django 继续处理其他请求,以便为用户保持流畅的操作,同时Celery 负责一一上传所有文件。
我可以这样做吗?
如果可以的话,它的缺点是什么?
会不会有丢失部分文件上传的情况?
我是 celery 的新手,不太清楚事情是如何发生的。所以,我希望社区能帮助我。
提前谢谢你。
【问题讨论】:
-
我认为您应该在应用程序处理请求之前处理文件上传过程。因为根据您在帖子中的描述,文件在一个请求中上传了两次 1. 文件已上传到您的服务器 2. 您将文件上传到了第三方服务器。为什么不直接上传到第三方服务器?
-
是的,文件将直接上传到第 3 方服务器(我已经编辑了问题)。但我主要担心的是如果我使用 celery 将文件上传到第 3 方服务器会丢失文件让 Django 只处理请求。
-
当然,您可以使用 celery 将文件上传到第三方服务器。但我想知道你是如何将文件从用户的计算机放到你的服务器的?我无法弄清楚这个过程。
-
是的,只有在我们执行 model_object.save() 时才会将文件上传到第三方服务器。所以,我打算将model_object发送到celery,它可以对其执行保存操作。
-
调用model_object.save()时文件的二进制数据已经上传到你的服务器。你应该避免这个过程
标签: django server celery virtual-machine django-celery