首页 > 解决方案 > 将 Flask 与需要并行到多个内核上的 CPU 绑定请求一起使用

问题描述

我工作的一位计算科学家编写了一个程序,该程序使用使用 scikit-learn 构建的机器学习模型对输入进行评分。我的任务是让这个机器学习记分器作为微服务可用。

所以我用 Flask 写了几行代码来完成这个。任务达成!

嗯,不完全是。因为该服务有时会被大量使用,所以它需要能够并行处理多个请求。(即,在多个内核上。我们的服务器上大约有 20 个。)我可以通过大约 10 分钟的努力实现的解决方案是在不同的端口上启动 10 或 20 个这些小型 REST 服务器并循环到它们使用 nginx 作为反向代理。

虽然这会很好,但我敢肯定,我认为让一个 Python 服务器处理所有请求会更优雅,而不是拥有 20 个 Python 服务器。所以我开始阅读 WSGI 和 uWSGI 以及其他一些东西。但是我通过所有这些阅读和网上冲浪所完成的一切最终都变得非常混乱。

所以我会在这里问,而不是试图自己解决这个问题:我应该坚持我上面描述的蛮力方法吗?或者有什么更好的我可以做的吗?

但是,如果做一些“更好”的事情需要花费数天的时间来阅读难以理解的文档,进行令人沮丧的实验,并拔掉我所有的头发,那么我宁愿坚持我已经理解的愚蠢的蛮力方法,并且我知道肯定会奏效。

谢谢。

标签: pythonnginxflaskwsgi

解决方案


我建议为此迁移 FastAPI。它明显更快,非常易于使用(特别是如果您从 Flask 迁移),并且被很多人用于 ML 推理。

FastAPI 在 python 中使用了更新的异步功能,这允许它使用相同数量的资源处理更多的请求。

您还可以将现有的 docker 容器用于烧瓶或 fastapi,而不是自己配置。


推荐阅读