我正在使用 Flask-restplus 构建 REST API。我的端点之一获取从客户端上传的文件并运行一些分析。该作业最多需要 30 秒。我不希望这项工作阻塞主进程。因此端点将立即返回 200 或 201 响应,作业仍然可以运行。结果将保存到数据库中,稍后可检索。
对于长期运行的工作,我似乎有两种选择。
- 螺纹加工
- 任务队列
线程相对简单一些。但问题是,Flask 应用程序的线程数是有限制的。在独立的 Python 应用程序中,我可以使用线程队列。但这是REST api,每个请求调用都是独立的。我不知道是否有办法为此维护全局队列。因此,如果请求超出线程限制,它将无法接受更多请求。
使用 Celery 和 Redis 的任务队列可能是更好的选择。但这只是概念验证,时间有点紧迫。使用 Flask 设置 Celery、Redis 并不容易,我在 Windows 开发机器上遇到了很多麻烦。它将部署在AWS上,这有点复杂。
我想知道这种情况是否还有第三种选择?
我强烈推荐使用Celery https://flask.palletsprojects.com/en/1.1.x/patterns/celery/正如您在帖子中已经提到的。它是专门针对此用例而构建的。他们的文档内容非常丰富,并且不乏可以帮助您快速启动和运行的在线示例。
另外,我想说THIS https://github.com/miguelgrinberg/flask-celery-example将是您入门的绝佳第一个资源。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)