【问题标题】:What are the limitations of the flask built-in web serverFlask 内置 web 服务器有哪些限制
【发布时间】:2014-01-17 13:43:06
【问题描述】:

我是网络服务器管理的新手。我多次读过,flask 内置 web 服务器不是为“生产”而设计的,只能用于测试和调试......

但是,如果我的应用只接触一千个偶尔向服务器发送数据的用户怎么办?

如果可行,我什么时候才需要配置更复杂的 Web 服务器? (我正在寻找近似指标)。

简而言之,我很想知道内置 Web 服务器可以做什么(大约阈值)和不能做什么。

非常感谢!

【问题讨论】:

  • 我不同意可能的重复。尽管它们都将内置 Web 服务器的 Flask 视为“生产”环境,但这两个问题本质上是不同的(是/否问题 VS 定性问题),而且这个问题更具体。

标签: webserver flask sysadmin embeddedwebserver


【解决方案1】:

这个问题没有一个正确的答案,但请记住以下几点:

通过适量的水平扩展,您很有可能永远保持对调试服务器的使用扩展。您何时需要开始扩展(或切换到使用“真实”网络服务器)还取决于您托管的环境、用户的期望等。

您可能会遇到的主要问题是服务器是单线程的。这意味着它将按顺序依次处理每个请求。这意味着,如果您尝试处理多个请求(包括网站图标、图像、CSS 和 Javascript 文件等静态项目等),请求将花费更长的时间。如果任何给定的请求碰巧需要很长时间(例如,20 秒),那么您的整个应用程序在这段时间内(20 秒)都没有响应。当然,这只是默认设置:您可以增加线程数(或在其他进程中处理请求),这可能会缓解一些问题。但再一次,在“高”负载下它仍然可能很慢。什么被认为是“高”负载取决于您的应用程序以及对最大可接受响应时间的期望。

另一个问题是安全性:如果您完全关心安全性(不仅仅是应用程序本身数据的安全性,还有运行它的盒子的安全性),那么您不应该使用开发服务器。它还没有准备好承受任何形式的攻击。

最后,开发服务器可能会彻底失败。它不是为长时间运行(几天、几周、几个月)而设计的,因此它没有经过很好的测试来以这种能力工作。

所以,是的,它有局限性。是的,您仍然可以在生产中使用它。是的,我仍然建议使用“真正的”网络服务器。如果您不喜欢需要安装 Apache 或 Nginx 之类的东西的想法,您仍然可以通过使用一些 WSGI Standalone servers 来使用仍然像“运行 python 脚本”一样简单的解决方案,它可以运行设计用于生产的服务器,就像在命令行中运行 python run_app.py 一样简单。您通常只需要创建一个 4-5 行的 python 脚本来导入和创建服务器对象,将其指向您的 Flask app,然后运行它。

gunicorn 可以只在命令行上运行以下命令,不需要额外的脚本:

gunicorn myproject:app

...其中“myproject”是包含app Flask 对象的Python 包。请记住,gunicorn 的一位开发人员可能会建议反对这种方法。见https://serverfault.com/questions/331256/why-do-i-need-nginx-and-something-like-gunicorn

【讨论】:

  • 使用 Apache/Nginx/gunicorn 的优缺点是什么,即我该如何选择? Gunicorn 够好吗?
【解决方案2】:

OP 早就开始了,但是对于那些将来遇到这个问题的人,我只想补充一点,即使在笔记本电脑上设置 Apache 服务器也是免费且非常容易的。只需取消注释或注释掉配置文件中的行,就可以根据需要轻松配置尽可能少或尽可能多的功能。现在可能有一种更简单的 GUI 方法可以做到这一点,但只需编辑配置就很简单了。

【讨论】:

  • 服务器需要兼容 WSGI。
  • Apache 有一个 WSGI 模块 (mod_WSGI)。
  • 我明白了——以前不知道。谢谢托德让我知道。
猜你喜欢
  • 2010-11-23
  • 2016-07-02
  • 1970-01-01
  • 2017-07-12
  • 2011-03-06
  • 2015-04-15
  • 2019-05-23
  • 2020-12-16
  • 2017-06-29
相关资源
最近更新 更多