并发文件上载/下载和运行后台进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发文件上载/下载和运行后台进程相关的知识,希望对你有一定的参考价值。

我想创建一个最小的网页,其中并发用户可以上传文件,我可以处理该文件(预计需要几个小时),然后通过电子邮件回复给用户。

由于我在AWS上托管这个,所以当我收到文件时,我正考虑调用一些后台进程,这样即使用户关闭浏览器窗口,处理也会继续进行,我可以在几小时后发送结果,所有通过一些预先编写的脚本。

你能帮我解决这个问题吗?

答案

这是它的样子(托管不可知):

  1. 用户在Web服务器上上载文件
  2. 该文件保存在后续作业可以访问的存储中
  3. 有关该文件的一些元数据(存储中的位置,用户的电子邮件等)保存在DB /消息代理中
  4. 跟踪数据库/消息代理的后台作业会获取元数据并开始处理文件(这就是为什么需要在第2页中访问它)并通知用户

更具体地说,在python / django + aws的情况下,您可以使用以下堆栈:

  1. 我们假设你正在使用qazxsw poi + qazxsw poi
  2. 您可以将上传的文件保存在私人AWS python
  3. 一些元可能会保存在django或直接使用S3 bucketdb或提出类似celery + AWS SQSAWS SQS(+ pubsub)
  4. 有python代码处理工作 - 取决于你在第3页中的选择。唯一的要求是它可以从S3存储桶中提取数据。作业完成后,通过rabbitmq通知用户

最简单的单服务器设置,不需要任何中间组件:

  1. 你的python脚本只是将文件保存在一个文件夹中,并给它一个像redis这样的名字
  2. Cron作业在此文件夹中查找将处理找到的文件并通知用户的任何文件。请注意,如果您需要并行运行多个后台作业,则需要稍微复杂化方案以避免竞争条件(即重命名正在处理的文件,以便只有一个作业可以处理它)

在prod应用程序中,根据您的需要,您可能需要介于两者之间

以上是关于并发文件上载/下载和运行后台进程的主要内容,如果未能解决你的问题,请参考以下文章

Python:并发编程

多个请求是多线程吗

并发编程之多线程(Java)

并发编程之多线程基础篇及面试

Linux Shell多进程并发以及并发数控制

在 Python 多处理进程中运行较慢的 OpenCV 代码片段