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相对容易入门,并且不需要您管理工作人员(或队列)基础结构。