Je débute avec Python et même la programmation, ce qui entraîne beaucoup de questions auxquelles je ne trouve pas toujours les réponses dans les articles sur le web.

J'ai décidé de jeter mon dévolu sur le framework Sanic. Il commence à mûrir et me semble prêt à passer l'étape de la production.

Pour rappel, il s'agit d'un framework web qui utilise les nouvelles possibilités de Python 3.5 et suivant, à savoir asyncio, grâce aux coroutines.
Sanic a été développé en se basant sur la boucle d’événement Uvloop au lieu de la boucle native, il utilise également un parseur pour les requêtes http optimisé.
Tout laisse donc à penser que ce genre d'outil est le futur, car il permet d'assurer un flux de données servi par le serveur beaucoup plus important.

J'ai cependant besoin d'un moteur de template afin de simplifier le travail de conception des pages du site web. J'ai bien aimé découvrir le framework Flask et son moteur de template intégré, à savoir Jinja2.
J'ai essayé de regarder ce qui se faisait d'autres, notamment Mako, mais j'ai décidé d'en rester à Jinja2.

Quelques recherches dans la documentation m'ont permis de constater qu'un mode asynchrone a été ajouté depuis 2017 à Jinja2. Je n'ai pas cherché à comprendre exactement ce qui se cachait derrière dans les sources. En effet, à part la lecture du fichier de template, je ne vois pas d'autres IO dans un moteur de templates, donc un intérêt limiter de faire de l'asynchrone. Je ne connais que Aiofile pour la gestion des fichiers en asynchrone (apparemment plutôt une gestion multithread) et il ne semble pas que Jinja2 utilise ce module, alors je me demande s'il y a un intérêt à gérer des coroutines pour exécuter Jinja2. Je ne suis pas assez compétent pour répondre ...

Imaginons que l'utilisation de Jinja2 en mode asynchrone soit bénéfique, la mise en œuvre est assez simple. Il suffit de passer en paramètres "enable_async=True" lors de l'instanciation de l'objet Environnement de Jinja2, puis d'utiliser la méthode "render_async()".
On trouve un exemple ici : https://github.com/channelcat/sanic/pull/641/files

Par ailleurs j'ai trouvé deux extensions pour intégrer Jinja2 à Sanic, à la façon de Flask :
- https://github.com/yunstanford/jinja2-sanic
- https://github.com/lixxu/sanic-jinja2

Par curiosité j'ai regardé un peu les sources et fait une recherche sur les mots clé utilisés par l'API de Jinja2 en mode asynchrone (enable_async et render_async). Rien dans les sources, pareil dans les exemples d'utilisation de l'API des extensions.
Est ce que ces extensions utiliseraient Jinja2 en mode synchrone ? J'ai encore un peu de mal à décortiquer tout le code source pour le comprendre de A à Z, alors je ne sais pas répondre de façon certaine à cette question, mais il semblerait bien que ce soit le cas.

J'ai ouvert aussi un ticket sur reddit au cas où : https://www.reddit.com/r/learnpython...te_and_jinja2/

Je me pose plusieurs questions.

D'abord, faut il utiliser ces extensions alors que la syntaxe native de Jinja2 me semble parfaitement acceptable ? Je sais qu'il faut éviter de réinventer la roue, mais là, n'est il pas plus judicieux d'utiliser directement l'API de Jinja2.

Ensuite, ces extensions utilisent elle vraiment le mode asynchrone ?

Et enfin, le mode asynchrone pour le moteur de template Jinja2 est il judicieux.

Désolé, beaucoup de questionnement, mais j'aime bien comprendre ce que je fais. Utiliser un framework sans savoir un minimum ce qui se passe derrière, cela me dérange.

Merci par avance pour votre aide si vous avez des idées ou des remarques à mes interrogations