并发文件上载/下载和运行后台进程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发文件上载/下载和运行后台进程相关的知识,希望对你有一定的参考价值。
我想创建一个最小的网页,其中并发用户可以上传文件,我可以处理该文件(预计需要几个小时),然后通过电子邮件回复给用户。
由于我在AWS上托管这个,所以当我收到文件时,我正考虑调用一些后台进程,这样即使用户关闭浏览器窗口,处理也会继续进行,我可以在几小时后发送结果,所有通过一些预先编写的脚本。
你能帮我解决这个问题吗?
答案
这是它的样子(托管不可知):
- 用户在Web服务器上上载文件
- 该文件保存在后续作业可以访问的存储中
- 有关该文件的一些元数据(存储中的位置,用户的电子邮件等)保存在DB /消息代理中
- 跟踪数据库/消息代理的后台作业会获取元数据并开始处理文件(这就是为什么需要在第2页中访问它)并通知用户
更具体地说,在python
/ django
+ aws
的情况下,您可以使用以下堆栈:
- 我们假设你正在使用qazxsw poi + qazxsw poi
- 您可以将上传的文件保存在私人AWS
python
中 - 一些元可能会保存在
django
或直接使用S3 bucket
或db
或提出类似celery + AWS SQS
或AWS SQS
(+ pubsub) - 有python代码处理工作 - 取决于你在第3页中的选择。唯一的要求是它可以从S3存储桶中提取数据。作业完成后,通过
rabbitmq
通知用户
最简单的单服务器设置,不需要任何中间组件:
- 你的python脚本只是将文件保存在一个文件夹中,并给它一个像
redis
这样的名字 - Cron作业在此文件夹中查找将处理找到的文件并通知用户的任何文件。请注意,如果您需要并行运行多个后台作业,则需要稍微复杂化方案以避免竞争条件(即重命名正在处理的文件,以便只有一个作业可以处理它)
在prod应用程序中,根据您的需要,您可能需要介于两者之间
以上是关于并发文件上载/下载和运行后台进程的主要内容,如果未能解决你的问题,请参考以下文章