3 votes

Comment Flask charge le blueprint en interne ?

Je suis juste intéressé par la façon dont les plans de Flask sont importés. Il importe toujours le module python à la fin de tout ce qui est fait par Flask et si je ne me trompe pas, python fait deux choses lors de l'importation : il enregistre le nom du module dans l'espace de noms et l'initialise si nécessaire.

Donc si le blueprint Flask est initialisé quand il est enregistré, tout le module est alors en mémoire et s'il y a beaucoup de blueprints à enregistrer, la mémoire est juste gaspillée, parce que dans une requête, vous utilisez essentiellement un blueprint. Ce n'est pas une grosse perte mais quand même...

Mais s'il n'est enregistré que dans l'espace de noms et n'est initialisé qu'en cas de besoin (lorsque la demande réelle l'atteint), alors il est logique de les enregistrer tous en même temps (comme c'est la méthode recommandée que j'ai comprise). Je suppose que c'est le cas ici :) Mais je voulais juste demander et comprendre un peu plus profondément.

3voto

MalphasWats Points 1396

Je ne suis pas un expert, loin de là, mais j'ai joué un peu avec les plans récemment.

Vous ne pouvez enregistrer un blueprint sur votre application flask que si le code du blueprint a été importé dans l'instance Python actuelle, par exemple :

from my_blueprint import blueprint_object

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

ce qui signifie que toute la mémoire requise pour blueprint_object a été allouée, les __init__.py associé à my_blueprint a été évalué et tout est prêt à partir.

J'ai brièvement expérimenté en essayant de charger un plan dans la base de données de l'UE. app.before_first_request mais flask ne permet pas cela, les blueprints doivent tous être chargés avant que quelque chose ne fasse une requête (et les before_first_request fonctionne efficacement juste après cela, mais avant que tout autre code ne puisse jouer).

Les Blueprints sont conçus pour fournir des fonctionnalités extensibles aux applications web Flask. Je ne vois pas pourquoi les charger serait un gaspillage de ressources, à moins que vous n'utilisiez une fonctionnalité particulière qu'une seule fois, auquel cas, vous pourriez vouloir refacturer votre application en un certain nombre d'applications différentes que vous pouvez faire tourner selon vos besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X