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

时间:2018-02-28 10:35:23

标签: python bash concurrency background-process

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

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

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

1 个答案:

答案 0 :(得分:1)

以下是它的外观(托管不可知):

  1. 用户在网络服务器上传文件
  2. 该文件保存在存储中,以后可以通过后台作业访问
  3. 有关该文件的部分元数据(存储位置,用户电子邮件等)保存在数据库 / 消息代理
  4. 跟踪数据库 / 消息代理的后台作业会选择元数据并开始处理文件(这就是为什么它需要在第2页中访问它)并通知用户
  5. 更具体地说,如果是python / django + aws,您可以使用以下堆栈:

    1. 假设您使用的是python + django
    2. 您可以将上传的文件保存在私有 AWS S3 bucket
    3. 某些元可能会保存在db或直接使用celery + AWS SQSAWS SQS,或者会显示rabbitmqredis(+ 发布订阅
    4. 处理作业的python代码 - 取决于您在第3页中的选择。唯一的要求是它可以从S3存储桶中提取数据。作业完成后,通过AWS SES
    5. 通知用户

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

      1. 您的python脚本只是将文件保存在一个文件夹中,并为其命名为someuser@yahoo.com-f9619ff-8b86-d011-b42d-00cf4fc964ff
      2. Cron作业查找此文件夹中可处理找到的文件并通知用户的任何文件。请注意,如果您需要并行运行多个后台作业,则需要稍微复杂一点,以避免竞争条件(即重命名正在处理的文件,以便只有一个作业可以处理它)。
      3. 在prod应用程序中,根据您的需要,您可能需要介于两者之间