.. blogpost:: :title: Quelques modules intéressants :keywords: loguru, botflow, pandas :date: 2019-05-20 :categories: modules Une liste de modules à suivre. Un benchmark sur :epkg:`pandas` pour commencer : `Fast-Pandas `_. On voit que en deça de 10.000 lignes, l'ordinateur passe son temps surtout dans le code python. Après, il fait enfin un peu de calcul. .. contents:: :local: Pédagogie +++++++++ `Algojammer `_ fonctionne un peu comme `PythonTutor `_ mais il est plus adapté aux algorithmes qui manipulent de grandes données. Web +++ `vibora `_ : plus rapide que tout ce qui existe car écrit en :epkg:`cython`. Le plus rapide est probablement `ja-pronto `_ mais il n'a pas l'air d'être vraiment maintenu. Le site mentionne que le projet est en cours de réécriture. Entre temps, je me suis dirigé sur `starlette `_, `hypercorn `_, `uvicorn `_, `falcon `_ Ligne de commande +++++++++++++++++ `python-nubia `_ : pour créer des lignes de commandes facilement. C'est plus rapide que ce que j'avais en tête avec la fonction `cli_main_helper `_ qui parse la documentation pour construire la documentation de la fonction. Malheureusement, cela inclut :epkg:`docutils` et :epkg:`sphinx` qui sont des dépendances assez longues à charger. Cette option est plus déclarative. Optimisation ++++++++++++ `pymagnitude `_ : calculer les prédictions de modèles de deep learning un peu plus vite. `lmdb-embeddings `_ est une autre option qui permet de stocker les coefficients sur un disque `SSD `_, moins de choses en mémoire pour une perte très légère en performance. Workflow ++++++++ `faust `_ : traiter en temps réel des événements avec `Kafka `_. `botflow `_ ou comment créer des workflows pour manipuler les données et donc faire du machine learning sur des données conséquentes. Plus simple que `luigi `_, fonctionne en local. Bref, il faut avoir du temps et un besoin pour rentrer dans tout ça : `Data pipelines, Luigi, Airflow: everything you need to know `_. Logging, Profiling, Refactoring +++++++++++++++++++++++++++++++ `pampy `_ permet de retrouver des informations dans des grosses structures de données. Utile pour débugger. `Bowler `_ est un outil pour faire du refactoring. Il se balade dans le code avec des arbres syntaxiques. `pyre-check `_ : vérifie les `annotations `_. `py-spy `_ est un profileur qui regarde régulièrement où en est un programme. A la fin de l'exécution, il compte le nombre de fois qu'il était dans telle ou telle fonction. Ces profileurs dits *sampling profiler* sont en général plus rapide car ils ne modifient pas le programme. `loguru `_ : pour logger plus facilement que `logging `_. Pas mal pour logger les call stack : :: logger.add("output.log", backtrace=True, diagnose=True) # Set 'False' to not leak sensitive data in prod def func(a, b): return a / b def nested(c): try: func(5, c) except ZeroDivisionError: logger.exception("What?!") nested(0) Ce qui donne : :: 2018-07-17 01:38:43.975 | ERROR | __main__:nested:10 - What?! Traceback (most recent call last): File "test.py", line 12, in nested(0) + > File "test.py", line 8, in nested func(5, c) ¦ + 0 + File "test.py", line 4, in func return a / b ¦ + 0 + 5 ZeroDivisionError: division by zero