我正在使用Flask-restplus构建REST API。我的一个端点获取从客户端上传的文件并运行一些分析。作业最多使用 30 秒。我不希望作业阻塞主进程。因此,端点将立即返回包含 200 或 201 的响应,作业仍然可以运行。结果将保存到数据库,稍后将检索。
对于长时间运行的作业,我似乎有两种选择。
- 线程
- 任务队列
线程相对简单。但问题是,Flask 应用程序的线程数是有限制的。在独立的 Python 应用程序中,我可以对线程使用队列。但这是 REST api,每个请求调用都是独立的。我不知道是否有办法为此维护全局队列。因此,如果请求超过线程限制,它将无法接受更多请求。
使用芹菜和 Redis 的任务队列可能是更好的选择。但这只是一个概念验证,时间线有点紧。使用Flask设置芹菜,Redis并不容易,我在开发机器(Windows(上遇到了很多麻烦。它将部署在AWS上,这有点复杂。
我想知道这种情况是否有第三种选择?
我强烈建议使用您在帖子中已经提到的芹菜。它正是为此用例而构建的。他们的文档非常有用,并且不乏可以让您快速启动和运行的示例。
此外,我想说这将是您开始的绝佳第一资源。
芹菜是解决这个问题的绝佳解决方案,我过去曾非常成功地使用过每天管理数百万个工作。
唯一真正的缺点是最初的学习曲线和调试的复杂性,当事情变糟时(它可能发生,尤其是数百万个工作(。