Performance (Flask)

La performance dans Flask désigne la capacité de l’application à répondre rapidement et efficacement aux requêtes, même sous forte charge, tout en consommant un minimum de ressources.

Flask, étant un framework minimaliste, n’inclut pas d’optimisations avancées par défaut. Il laisse la liberté au développeur de choisir les bonnes pratiques, architectures et outils pour améliorer la rapidité et la scalabilité.

Cela concerne notamment :


Comment ça fonctionne dans Flask

1. Optimisation du code et des requêtes

2. Gestion des ressources statiques

3. Mise en cache et optimisation réseau

4. Scalabilité

5. Asynchronisme


Exemple conceptuel


Bonnes pratiques


Pourquoi c’est important


En résumé

Fonctions :

  • Performance avec Flask exemple

    Exemple de code :

    from flask import Flask, jsonify
    import time
    from functools import lru_cache
    
    app = Flask(__name__)
    
    # 1️⃣ Fonction lente simulée
    def long_computation(x):
        time.sleep(2)  # Simule un calcul long
        return x * x
    
    # 2️⃣ Cache simple pour améliorer la performance
    @lru_cache(maxsize=32)
    def cached_computation(x):
        return long_computation(x)
    
    # 3️⃣ Route qui mesure le temps d'exécution
    @app.route("/compute/<int:x>")
    def compute(x):
        start_time = time.time()  # Début du chronométrage
        result = cached_computation(x)
        end_time = time.time()  # Fin du chronométrage
        duration = round(end_time - start_time, 2)
        return jsonify({
            "input": x,
            "result": result,
            "execution_time_seconds": duration
        })
    
    # 4️⃣ Route rapide
    @app.route("/")
    def home():
        return "Bienvenue ! Essayez /compute/10 pour tester la performance."
    
    if __name__ == "__main__":
        app.run(debug=True)

    Explication du code :

    from flask import Flask, jsonify importe la classe Flask pour créer l’application web et jsonify pour renvoyer des réponses JSON facilement.

    import time importe le module time pour mesurer le temps d’exécution des fonctions.
    from functools import lru_cache importe le décorateur lru_cache pour mettre en cache les résultats de fonctions afin d’améliorer la performance.

    app = Flask(__name__) crée une instance de l’application Flask.

    1️⃣ Fonction de calcul long

    def long_computation(x): définit une fonction qui simule un calcul long.
    time.sleep(2) retarde l’exécution de 2 secondes pour simuler un traitement coûteux.
    return x * x retourne le carré de la valeur passée en argument.

    2️⃣ Fonction mise en cache

    @lru_cache(maxsize=32) applique un cache pour mémoriser jusqu’à 32 résultats récents.
    La fonction cached_computation(x) renvoie le résultat du calcul, mais si le même argument a déjà été calculé, le résultat est récupéré instantanément depuis le cache, améliorant ainsi la performance.

    3️⃣ Route de calcul avec mesure du temps

    @app.route("/compute/<int:x>") définit une route qui prend un entier en paramètre dans l’URL.
    start_time = time.time() démarre le chronomètre avant le calcul.
    result = cached_computation(x) exécute le calcul ou récupère le résultat depuis le cache.
    end_time = time.time() capture l’heure après le calcul.
    duration = round(end_time - start_time, 2) calcule la durée en secondes.
    return jsonify({...}) renvoie un objet JSON contenant l’entrée, le résultat et le temps d’exécution.

    4️⃣ Route d’accueil

    @app.route("/") définit la route principale.
    return "Bienvenue ! Essayez /compute/10 pour tester la performance." renvoie un texte simple pour tester l’application.

    5️⃣ Lancer l’application Flask

    if __name__ == "__main__": vérifie que le script est exécuté directement.
    app.run(debug=True) démarre le serveur Flask en mode debug, accessible à http://127.0.0.1:5000/. Le mode debug permet le rechargement automatique et l’affichage détaillé des erreurs.