关于python:如何在Flask中运行后台作业而无需线程或任务队列

How do I run background job in Flask without threading or task-queue

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

看来我有两种选择可以长期工作。

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

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

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


    正如您在帖子中已经提到的,我强烈建议您使用Celery。正是为此用例构建的。他们的文档非常有用,在线示例不多,可以帮助您快速入门和运行。

    另外,我想说这将是您入门的极好的第一资源。


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

    唯一真正的弊端是当事情变糟时(可能会发生,尤其是在有数百万个工作的情况下)的初始学习曲线和调试的复杂性。

    如果您愿意使用托管解决方案,则可以查看Coherence API语言集成的分布式任务

    在完全公开的情况下,这是我生产的产品,可以代替我项目中的芹菜。它比Celery相对容易入门,并且不需要您管理工作人员(或队列)基础结构。