是管理.py组织/编写Flask应用程序的正确方法?

2024-06-16 11:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,让我说,我觉得问这个问题很傻,因为我找不到我前一段时间读过的那篇文章/文章提供了不使用的理由管理.py. 在

我最近发布了一个web应用程序,我很难将manage.py runserver格式转换为gunicorn app:app格式。我做错什么了吗?这应该是一种微风吗?是这样做的吗?在

我想我真正要问的是:关于manage.py runserver等等,编写一个应用程序然后设置它使用gunicorn进行部署的正确方法是什么?在

如果有人对我的问题感到困惑,请问我,因为我真的很想知道答案,因为我正计划在不久的将来开发另一个应用程序。提前谢谢!在


Tags: 方法答案pywebapp应用程序manage部署
2条回答

manage.py是web框架中的一个常见概念。它用于运行命令和启动开发服务器。Flask脚本扩展为Flask提供此函数。在

最简单的“管理”脚本只需导入应用程序实例(或从工厂创建并运行它,或在应用程序上下文中运行另一个命令)。在

from my_app import app
app.run()
# or for custom commands
with app.app_context():
    do_command()

烧瓶脚本做的更多,但它最终归结为这一点。现在应该很明显,gunicorn my_app:app也在做同样的事情。gunicorn不是运行dev服务器,而是一个生产应用服务器,使用与dev服务器相同的应用实例。在

这个答案适用于Django和Flask(以及所有其他Python wsgi框架,AFAIK):

像Flask和Django这样的应用程序都带有一个轻量级的内置web服务器,它将在您开发时帮助您。它们是功能齐全的HTTP服务器,理论上可以在生产中使用。但你不应该。在

您不应该这样做的原因是这些服务器往往非常基本,单线程,而且非常简单。从开发的角度来看,这是一件好事,因为您不必担心安装这个、那个和其他。另外,他们可能会做一些漂亮的事情,比如当你做出改变时,为你重新加载你的应用程序。在

但他们只希望一个用户一次触摸页面。你,开发者。在

这不是你在生产中想要的。在

在生产环境中,您需要一个能够通过线程(但是probably not)或reactor模式每秒处理数千个请求的web服务器。您不希望web服务器在处理长时间运行的查询或文件上载时停止响应其他请求。这就是像Gunicorn或Tornado这样的服务器——它们允许一次发生大量连接,并且它们能够处理Django/Flask/Bottle/CherryPy/等应用程序与整个互联网之间的通信。这是件好事。在

从内置的wsgi服务器和gunicorn/tornado或任何可以运行wsgi应用程序的东西进行交换的过程应该是一个复杂的过程。这就是wsgi层的全部要点。在

如果在转换过程中遇到问题,要么您的理解有问题,要么您的应用程序配置错误。这两个问题都是SO社区可以帮助解决的,而且可能有一些问题已经解决了大多数更常见的场景。在

相关问题 更多 >