4 Commentaires
Avatar de User
Avatar de Tom Alony

Je m’intéresse aussi beaucoup à l’optimisation de mes applications. J’aime beaucoup ta démarche. Ça fait longtemps que t’es là dedans ?

Si t’as le temps ça m’intéresserait de savoir quels sont les avantages spécifiques de l’utilisation du ProcessPoolExecutor pour le traitement des pixels dans les images, et comment se compare-t-il aux méthodes asynchrones et séquentielles utilisées précédemment dans ton script ?

Expand full comment
Avatar de Téva KRIEF

Hello, merci pour ton message !

Alors, ça fait déjà quelque temps que je regarde et que je profile mon code afin d'essayer de gagner en vitesse ou en mémoire. Dernièrement, je me suis vraiment plongé dedans et c'est vrai qu'il y a BEAUCOUP de choses à apprendre (dont pas mal de sujets que je vais essayer de traiter dans ces articles).

En ce qui concerne ta deuxième question, si j'ai bien compris, le défi principal est de récupérer les images, ce qui constitue une problématique d'entrée/sortie (IO), car l'envoi d'une requête entraîne une période d'inactivité du CPU, qui se retrouve en attente.

Ainsi, l'utilisation d'asyncio pour envoyer toutes nos requêtes en parallèle peut être une solution. Par la suite, nous utilisons le ProcessPoolExecutor pour diviser la phase de calcul (notamment le comptage de pixels) avant d'agréger les résultats.

L'inconvénient de cette méthode est qu'elle nécessite tout de même le transfert d'une quantité importante de données entre les processus, ce qui n'est pas idéal. Cependant, comme je l'ai mentionné, le script peut encore être optimisé.

Je ne sais pas si tu as eu l'occasion de développer ta propre version ?

Expand full comment
Avatar de Tom Alony

Merci pour ta réponse rapide et super instructive ! C’est vraiment intéressant de voir comment tu gères l’optimisation, surtout avec les problèmes d’IO et de calcul. Je n’ai pas encore tenté de créer ma propre version, mais grâce à tes conseils, j’ai vraiment envie de m’y mettre. Il y a tellement de pour et de contre dans chaque solutions que c’est dur de choisir la bonne pour notre cas...

J’ai hâte de lire tes prochains articles pour apprendre encore plus. Continue comme ça, c’est top !

Expand full comment
Avatar de Téva KRIEF

Merci pour ton commentaire, ça fait plaisir de lire des retours positifs !

Oui c'est sûr que c'est pas forcément évident.

L'idée c'est d'essayer de partir de quelque chose de relativement simple et qui fonctionne, puis de mesurer et de trouver là ou ça prend le plus de temps (en utilisant cProfile, PyInstrument ou autre) et d'optimiser cette partie.

Une fois que c'est fait, tu re-mesures et tu essaies d'avancer comme ça ! C'est un coup à prendre, mais ça devient vite très pratique !

Expand full comment