【发布时间】:2018-05-10 14:46:07
【问题描述】:
我正在使用 Flask-restplus 构建 REST API。我的一个端点获取从客户端上传的文件并运行一些分析。该作业最多使用 30 秒。我不希望这项工作阻止主进程。因此端点将立即返回 200 或 201 的响应,作业仍然可以运行。结果将保存到数据库中,稍后检索。
对于长期运行的工作,我似乎有两种选择。
- 线程
- 任务队列
线程相对简单。但问题是,Flask 应用程序的线程数是有限制的。在独立的 Python 应用程序中,我可以为线程使用队列。但这是 REST api,每个请求调用都是独立的。我不知道是否有办法为此维护一个全局队列。因此,如果请求超过线程限制,它将无法接受更多请求。
带有 Celery 和 Redis 的任务队列可能是更好的选择。但这只是概念验证,时间线有点紧。使用 Flask 设置 Celery、Redis 并不容易,我在我的开发机器上遇到了很多麻烦,这是一个 Windows。它将部署在有点复杂的 AWS 上。
我想知道这种情况是否有第三种选择?
【问题讨论】:
标签: python multithreading flask queue celery