【问题标题】:How do I run background job in Flask without threading or task-queue如何在没有线程或任务队列的情况下在 Flask 中运行后台作业
【发布时间】:2018-05-10 14:46:07
【问题描述】:

我正在使用 Flask-restplus 构建 REST API。我的一个端点获取从客户端上传的文件并运行一些分析。该作业最多使用 30 秒。我不希望这项工作阻止主进程。因此端点将立即返回 200 或 201 的响应,作业仍然可以运行。结果将保存到数据库中,稍后检索。

对于长期运行的工作,我似乎有两种选择。

  1. 线程
  2. 任务队列

线程相对简单。但问题是,Flask 应用程序的线程数是有限制的。在独立的 Python 应用程序中,我可以为线程使用队列。但这是 REST api,每个请求调用都是独立的。我不知道是否有办法为此维护一个全局队列。因此,如果请求超过线程限制,它将无法接受更多请求。

带有 Celery 和 Redis 的任务队列可能是更好的选择。但这只是概念验证,时间线有点紧。使用 Flask 设置 Celery、Redis 并不容易,我在我的开发机器上遇到了很多麻烦,这是一个 Windows。它将部署在有点复杂的 AWS 上。

我想知道这种情况是否有第三种选择?

【问题讨论】:

    标签: python multithreading flask queue celery


    【解决方案1】:

    我强烈建议您使用Celery,正如您在帖子中已经提到的那样。它正是为这个用例而构建的。他们的文档内容丰富,网上不乏可以帮助您快速启动和运行的示例。

    另外,我想说THIS 将是您开始使用的绝佳第一资源。

    【讨论】:

      【解决方案2】:

      Celery 是解决这个问题的绝佳解决方案,我过去曾非常成功地使用它来管理每天 数百万个工作

      唯一真正的缺点是最初的学习曲线和调试的复杂性,当事情变糟时(它可能会发生,尤其是在数百万个工作中)。

      【讨论】:

        猜你喜欢
        • 2015-12-31
        • 2021-12-11
        • 2020-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2012-12-11
        • 2013-06-12
        • 2015-10-31
        相关资源
        最近更新 更多