3

我只是对 Flask 的蓝图如何导入感兴趣。它仍然会在 Flask 完成的所有工作结束时导入 python 模块,如果我是对的,python 在导入时会做两件事:在命名空间中注册模块名称,然后在需要时对其进行初始化。

因此,如果 Flask 蓝图在注册时被初始化,那么所有模块都在内存中,如果有很多蓝图要注册,内存就会被浪费,因为在一个请求中基本上你使用一个蓝图。损失不大,但还是...

但是,如果它只在命名空间中注册并且仅在需要时(当真正的请求到达它时)进行初始化,那么一次注册它们是有意义的(这是我理解的推荐方式)。这就是我猜这里的情况:) 但只是想更深入地询问和理解。

4

1 回答 1

3

我绝对不是专家,但我最近一直在玩蓝图。

如果蓝图代码已导入当前 Python 实例,您只能在您的烧瓶应用上注册蓝图,例如:

from my_blueprint import blueprint_object

app.register_blueprint(blueprint_object, url_prefix='/my_blueprint')

这意味着 blueprint_object 所需的所有内存都已分配,__init__.py与之关联的文件my_blueprint已评估,一切准备就绪。

我尝试尝试在该app.before_first_request方法中加载蓝图,但烧瓶不允许这样做,蓝图都需要在任何东西发出请求之前加载(并在此之后before_first_request有效运行,但在任何其他代码开始播放之前)。

蓝图旨在为烧瓶网络应用程序提供可扩展的功能。我不确定为什么加载它们会浪费资源,除非您只使用一次特定的功能,在这种情况下,您可能希望将您的应用程序重构为许多不同的您可以根据需要启动的应用程序。

于 2012-11-12T10:58:20.337 回答