Session du 26 novembre 2024 à 21h00
TOSA & Certifications
Librairie Standard & Modules
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA
Session sur le garbage collector et le module GC.
00:00:00 :Et voilà, donc on commence.Donc, ce soir, comme annoncé, on va avoir le Garbage Collector et donc le module GC.Donc le module GC, je pense que vous l'avez tous traduit par vous-même, c'est le module pour le Garbage Collector.
00:00:14 :Donc, qu'est-ce que le Garbage Collector ?Déjà, ce qu'il faut savoir, c'est que le Garbage Collector va être effectivement une fonction qui est attachée au fonctionnement de JavaScript Python.
00:00:26 :C'est-à-dire que ce n'est pas un système qui tourne entre le deux fonds sur l'ensemble de votre GC.C'est vraiment quelque chose qui va tourner sur le script Python et qui va gérer cela.
00:00:36 :Donc, je vais essayer de dépasser ça pour que vous ayez un petit schéma.Hop, voilà.Ok, vous voyez un petit écran noir.C'est bon pour vous ?
00:00:54 :Est-ce que vous voyez un petit écran noir avec des trucs qui se font là ?C'est bon, vous voyez les trucs qui se font ?
00:01:04 :Ok, voilà, on est parti.Donc, comment Python va gérer le Garbage Collector ?En fait, le but du Garbage Collector, ça va vraiment être de gérer les variables que vous créez au fur et à mesure de votre script.
00:01:15 :C'est-à-dire que la plupart de vos scripts que vous faites souvent, vous allez créer 10-15 variables en fonction de la complexité de votre script.On parle bien sur un script simple.
00:01:25 :Mais ces variables-là, elles n'ont pas forcément vocation à vivre durant tout votre script.À un moment ou à un autre, vous allez finir par les passer.
00:01:35 :Pour gérer ça, le Garbage Collector, lui, il va utiliser ce qu'on appelle les comptes de référence.Je m'explique. Admettons que vous avez une variable A.
00:01:46 :Si aucune valeur, aucune autre variable ne pointe vers cette variable A,au moment où vous la supprimez,le Garbage Collector, qu'est-ce qu'il fait ?Il voit qu'il n'y a plus personne qui s'intéresse à la variable A.
00:01:58 :Il la supprime. D'accord ?Maintenant, si il voit que cette variable A, elle est devenue orpheline,et qu'elle n'a pas d'intérêt particulier,il n'y a rien qui pointe dessus,de lui-même, il va pouvoir aussi déciderde dire, allez, cette variable, je la supprime.
00:02:14 :Ok ?Donc, ce qu'il va faire, il va regarder,vous allez avoir votre variable A,sur laquelle pointe une variable B,sur laquelle pointe une variable C.
00:02:24 :Donc, tant que la variable A,il y a deux références de compte,donc B et C dans ce cas-là,lui, il va conserver cette variable.
00:02:32 :Si vous supprimez, donc,la variable C et la variable A,donc il n'y a plus rien qui pointe vers cette variable,là, le garbage collector, il dit, ok,elle ne sert plus à rien, plus personne ne s'en intéresse,je la supprime également.
00:02:48 :Là où ça va devenir un petit peu tricky,admettons que vous avez une variable 1,qui pointe vers une variable 2,qui pointe vers une variable 3.
00:03:00 :Dans le cadre de votre programme,vous supprimez la variable L2.Là, cette variable,elle ne va pas être supprimée réellement,elle va rester dans votre mémoire.
00:03:12 :Pourquoi ? Parce que le garbage collector, lui,va détecter qu'il y ala variable L1qui pointe vers la variable L2.Du coup,il ne peut pas supprimer cette valeur,puisque la variable 1 en a besoin.
00:03:26 :Donc, au final, dans votre mémoire,elle va rester en place.Je vais vous mettre un autre exemplede suppression totalement impossible.On va reprendrela variable L1,L2 et L3.
00:03:44 :Si L1 pointe vers L2,que L2 pointe vers L3et que L3 pointe vers L1.Là, si on essaie de supprimer ces variables,au final, il leur supprimerasans aucune de la mémoire,parce qu'il va toujours détecterqu'il y a un compte de référence qui existe,même si au bout du compte,
00:04:04 :ce sont des variables qui ont été suppriméesÇa vous paraît à peu près clair ou pas ?Oui.Alors maintenant,tout ça, comment ça marche ?
00:04:18 :Tout bêtement,le Garbage Collectorutilise trois générations.Donc la génération 0,la génération 1et la génération 2.Je crois qu'il y a un petit bug.
00:04:37 :Voilà.Lui, qu'est-ce qu'il va faire ?Quand vous créez une variable,quelle qu'elle soit,elle va tout de suite atterrir dans la génération 0.Donc mettons, vous créez une variable A, B et C.
00:04:59 :A la fin de son premier cycle,parce que le Garbage Collector va fonctionner par cycle,il va regarder parmi ces trois variableslesquelles sont toujours là.
00:05:11 :Donc mettons, la C a été supprimée,mais la A et la Bne sont pas suppriméeset il y a d'autres valeurs qui pointent vers elles.
00:05:19 :Donc là, il se dit que ces variablesvont à son destin à vivre un peu plus longtemps.Donc qu'est-ce qu'il va faire ?Il va transférer ces deux variablesdans la génération 1.
00:05:29 :Ce qui fait qu'on se retrouve avec,au final,plus de variables dans notre génération 0etnotre Aet notre B qui sont dans la génération 1.
00:05:41 :Là, il va faire un certain nombre de cyclesdans la génération 0.Donc de base, par défaut, c'est 700 cycles.D'accord ?Ça n'a pas pris, bien sûr, sinon c'est pas drôle.
00:05:55 :Voilà, 700 cycles.Et au bout de 700 cycles,il va commencer à faire un premier cycledans la génération 1et il va vérifier A et Blesquelles sont encore présentes.
00:06:07 :Admettons que B n'a plus de lien,il n'y a plus aucune variable,aucune fonctionnalité qui pointe vers B.Donc, ce qu'il va faire,il va supprimer Bet il va passer Adans la génération 2.
00:06:21 :Ok ?Donc, on se retrouveavec Aqui est dans la génération 2et notre génération 1 qui est videou qui a vu d'autres variables venirau fur et à mesure du temps.
00:06:35 :Et là, au bout de10 cycles de génération 1,c'est là que ça devient un petit peu plus compliqué,il va rentrer dans la génération 2.
00:06:43 :Donc, pour que vous compreniez bien,il va faire700 cycles dans la génération 0.Ça, tous les 700 cyclesça, tous les 700 cyclesil fait un compte de 700 cyclesdans la génération 0.
00:06:57 :Tous les 700 cycles de génération 0,il fait un cycle de génération 1.Ok ?Après qu'il a faitson cycle de génération 1,il refait 700 cycles de 0.
00:07:09 :Il fait un deuxième dans le 1.700 cycles de 0, un troisième dans le 1, et ainsi de suite.Quand il est arrivé à 10 cyclesde génération 1,il va faire un cycledans la génération 2.
00:07:21 :Et pareil,il va compter 10 cycles à chaque fois.Ce qui fait quepour faire les 10 cyclesde génération 1,il faut7000 cycles.
00:07:35 :Et pour faire les 10 cycles de génération 2,il faut70 000 cycles. D'accord ?Donc là, pour l'instant,ces chiffres sont impressionnants.C'est un petit peuun petit peu gros,mais ne vous inquiétez pas, vous allez comprendrel'intérêt après de connaîtreces cycles et de savoircomment ça fonctionne et qu'est-ce qu'on va pouvoir
00:07:57 :après toucher grâce au module GC.Est-ce que c'est toujours bon pour tout le monde ?J'ai l'air du personne.Ok. Alors, je vous ai fait
00:08:09 :une petite présentation.C'est ça.Ok.La valeur des 700,c'est arbitraire ?Ça a été défini, quand je veux dire,ça fait partie des règles de Python, j'imagine ?
00:08:27 :Ça n'a pas été défini au hasard ?C'est la valeur par défaut.Ah, par défaut, ça veut dire que c'est modifiable ?Voilà. On va y venir après, mais on peut modifier
00:08:35 :ces valeurs. D'accord.Merci.Donc là, je reprends le petit schéma que je viens de vous expliquerde manière un peu plus propre, histoire que ce soit plus visuel pour tout le monde.
00:08:43 :Donc là, on a nos 4 variablesA, B, C et D qui ont été créées.D'accord ?Le garbage collector fait son premier cycle.A la fin du premier cycle,le D est supprimé.
00:08:55 :Donc, il virecomplètement le D de la mémoire, donc la référencedu D n'existe plus du tout,et il transfère A, B et Cen génération 2.
00:09:05 :Il fait son deuxième cycle,on crée une variable EF,ces variables sont supprimées, à la fin du deuxième cycle,il les enlève de la mémoire.
00:09:13 :D'accord ?Et ainsi de suite. Là, on arrive au cycle 700dont je vous parlais, ce qui va déclencherle cycle 1 dans la génération 2.
00:09:21 :Ok ? Là, on a G et Hqui ont été créés.C a été supprimé.Donc, ce qu'il fait, il retire Ccomplètement de la génération 2.
00:09:31 :A et B, il les transfère en génération 3.G et H,il les transfère en génération 2.Et on continue.Là, on arrive, je vous ai faitun grand boucle,on arrive au bout du dixième cycle de génération 2.
00:09:45 :Donc, admettons, on se retrouve avecce lot de variables là.I et J qui viennent d'être créés, H et G qui sont toujoursen génération 2, et A et Bqui sont en génération 3. Admettons que
00:09:55 :celles-ci ont été supprimées.Donc, le garbage collector va supprimertoutes celles qui n'ont plus aucune référence,transférerd'un niveau celles qui peuvent l'être,et il va continuer son cycle ainsi de suite.
00:10:07 :Voilà, hop,on va revenir là-dessus.Hop, je vous mets autre chose.Est-ce que c'est bon pour vous ?Oui, impeccable, merci.Voilà.Donc maintenant, on va rentrerun petit peu plus dans dusujet. Je vais vous montrer un petit peu
00:10:39 :justementcomment on va pouvoir jouer avec tout çaavec Python.Un petit instant,je règle ça.Je crois que mon clavierfait...Voilà.C'est bon.
00:11:08 :C'est pas grave.Adaptation.Hop là, un petit instant.Petit imprévu.Voilà.Hop, je mets ça ici.Alors, je vais basculer sur mon Python.Voilà.OK, c'est bon pour vous.
00:11:50 :Alors, je fais un test d'écriture pour voirsi ça s'ébrouille pour tout le monde.Au niveau de la taille d'affichage,est-ce que ça va pour vous ?
00:12:01 :Est-ce que ça s'ébrouille pour tout le monde ?Au niveau de la taille d'affichage,est-ce que ça va pour tout le monde ?C'est un peu petit en fait.
00:12:09 :OK.Alors,je règle ça.Comme ceci. Est-ce que c'est mieux ?Oui, c'est mieux.Vous voulez un peu plus gros ?Après, si tu peux, oui.
00:12:27 :Si c'est pas pénalisant pour la démo,c'est pas mal.Allez, on parle là-dessus.Merci.Pour le module GC,mon programme d'essai tout simple,on fait un apport GC.
00:12:41 :Je vais déjà vous montrerpar rapport aux références de compte.Donc, admettons,on crée notre première valable Aqui contient la chaîne de caractères et le word.
00:13:01 :OK.Il faut que j'importe le module 6parce que le module 6 va vous permettre aussid'interagir là-dessus.OK.Donc par exemple,je vais vous montrer comment on peut savoirsi une variable a justementdes objets qui y font référence.
00:13:19 :Donc là, c'est le module 2.6.C'est getvariableAGetRefCountryEt en paramètre, on lui passenotre objet.Donc là, je vais lancer le scriptpour que vous voyez un peu ce que ça donne.
00:13:39 :Un petit peu ici.Là, il vous renvoie un chiffre entier.C'est-à-dire que là, actuellement,il y a quatre objets, tout comprisdu système, qui pointent vers la variable A.
00:13:49 :Et donc là, vous voyez,on a juste déclaré notre variableet donné une valeur.Et on a déjà quatre références de compte.Donc comme quoi, vous voyez que les références de compte,ça peut aller très très vite sur les variables.
00:14:01 :Et on peut très viteavoir un nombre important de références.C'est pour ça que le Garbage Collectorest assez utile pour gérer tout ça.Maintenant,je vais vous montrercomment ça évolue au fur et à mesure.
00:14:15 :Je vais créer une liste.Excuse-moi, pourquoi il y a quatre références de compte ?On va y venir après.Tu vas voir ce qui peut compter dessus.
00:14:23 :Là, je vais vous montrerun petit peu comment ça se passequand justement...Donc là,j'ai créé une liste.J'ai dû repasser surun clavier.
00:14:45 :C'est bon.C'est tout.Mon clavier m'a captéle fil.Voilà.Alors, là, je crée une liste vide.D'accord ?Et maintenant, ce que je vais faire, c'est que je vaissimplement ajouterma variable A dans la liste.
00:15:13 :Je vais tenter autre chosehistoire que ce soit un peu plus pratiqueparce que là, ça devientcatastrophique.Et je vois du direct.D'accord.Et forcément, j'ai pris ce que j'ai mis.
00:15:53 :Enfin, ça y est.Voilà.Excusez-moi.C'est tout.Et on est reparti.Donc, je vous disais,je vais rajouterla variable Aà ma liste.Et maintenant, on va reprendre ça.
00:16:15 :Comme ça, vous allez pouvoir voir la différence.On va réafficher le nombre de référencesqui pointent vers notrevariable A.Et vous voyez, tout à l'heure, on avaitseulement 4 références, mais du simple faitd'avoir rajouté la variable Adans ma liste que j'ai créée,ça a rajouté une référence
00:16:36 :qui pointe vers A, c'est-à-dire que la liste.Donc ça, c'est très intéressant à regarderpourtous ceux qui sont en train de voirles listes, d'étudier un petit peules copies, les dyscopies,les copies simples de listes.
00:16:50 :Vous voyez, en fait, là, on a juste ajoutéun lien vers l'objet.D'accord ? On n'a pas copiél'objet dans la liste réellement.OK ?
00:17:00 :Donc là, comme vous voyez, comme j'ai rajoutéla liste, la liste pointe vers A,du coup, on passe de 4 à 5.C'est bon pour tout le monde ?
00:17:08 :Alors maintenant, pour répondreà la question qui était posée,comment ça se fait qu'on a déjà 4références de comptevers la variable A ?
00:17:20 :On va utiliser cette référence.Donc là, on rentre bien dans le moduleGC.Cette commande GetReferer,ça va nous afficherl'intégralité.Je vais peut-être justecommenter ça.
00:17:36 :Comme ça.Non.Oui.Voilà.Etceci.Là, avec la notionréférer, on voittout ce qui pointevers notre variable A.D'accord ? Donc là,
00:18:04 :on avoilà.On va aller vers la fin, c'est là que c'est le plus intéressant.On a la liste, on a notre variable Aen elle-même.
00:18:16 :On a lemodule 6 qui pointe vers lui.Le module GC qui le gère.Le fait qu'il soit lié au fichier.Vous voyez, il y a quand même beaucoup dechoses dont on ne se doute pasqui pointent vers cette même variable.
00:18:34 :C'est pour ça qu'on obtient 4 références en 13 jours.Donc ça, c'est plus desfonctionnalités, on va dire,pourvraiment se renseigner.Vous n'allez pas les utiliser régulièrement.
00:18:48 :C'est bon à connaître carsi jamais un jour vous avez un petit souci,ou vous les cherchez à débugger un petit peu,vous pourrez utiliser ces commandes pour voir un petit peuce qui se passe au niveau de votre skate.
00:18:58 :Là, on va arriver sur des variablessur une commande dumodule GC qui est très intéressante.C'est le getResult.Et là, ça va répondre à la questionqui m'a été posée tout à l'heure par rapport aux chiffres.
00:19:10 :Voilà.Avec cette méthode,vous affichez tout simplementles cycles de génération.Donc ce que je vous disais tout à l'heure.700,10 et 10.Maintenant,je pense que vous me voyez venir.
00:19:30 :Est-ce que je peux modifier ces chiffres ?Puisqu'on a utiliséget pour les avoir, à votre avis,qu'est-ce qu'on va utiliser pour les modifier ?
00:19:38 :7.Et voilà.On a une commande qui existe aussi.Hop.Voilà.Je vais commenter ces deux-là.Voilà.OK.Voilà.Donc là, on voit bien le13H0, 13H1 et 13H2.
00:20:16 :Je ne sais pas si vous vous rappelez, je vous ai parlé tout à l'heure,les générations 0, générations 1, générations 2.Donc là, par exemple,j'ai fixéle nombre de cycles en génération 0 à 1000,le nombre de cycles en génération 1 à 20,le nombre de cycles en génération 2 à 30.
00:20:30 :Et si je faisderrière, je reprends cette commande-là,pour afficherles cycles.Hop.Vous allez voir qu'effectivement,il a bien pris en compteles modifications.
00:20:48 :OK.Maintenant, une fois que je vous ai ditça,je vais vous montrer ces deuxcommandes aussi habituées.Là, par exemple, si je lance celle-là,j'avais toutes ces deux commandes-là,c'est aussi sympa de les connaître.
00:21:04 :De toute façon, tout ce que je vais vous mettre comme commandes,Gab vous les reprendrasur un guideplus tard.Là, il y a cette commande-làqui existe aussi, qui est pas mal,qui s'appelle GetCounts.
00:21:18 :Et là, vous voyez,en fait, il nous indique qu'il a fait272 cyclesen génération 0.Il a déjà fait 3 cycles en génération 1,donc ça veut dire qu'il a déjà bouclé 3 fois les 700 cyclesen génération 0,et 2 cycles en génération 2.
00:21:34 :Vous voyez, ça a quand même déjà bien tourné.Vous voyez, les cycles, ça va très, très, très vite.C'est le commande-là.On va y voir juste après.
00:21:48 :Donc maintenant qu'on a vu tout ça,on est capable de voirun petit peu commentnotre garbage collector fonctionne,comment on peut lui imposer un mode de fonctionnement,les cités de nos cycles.
00:22:00 :Maintenant, quel est l'intérêt direct dans un script Python ?Je vais vous supprimer tout ça.On va garder juste les imports.Je vous ai préparéune petite cloche.
00:22:14 :Donc en fait,le cadencementdes cycles, on va dire quec'est peut-être un timer derrière.Ça dépend de la puissancede la machine, ou...Les cycles sont définis par défaut.
00:22:28 :Après,c'est sûr quesi tu as un core i3 ou un core i9,tes 700 cycles, ils vont se faire plus ou moins rapidement.D'accord, oui.
00:22:38 :C'est vraiment tributaire de la machine,enfin du matériel, quoi.Ça reste tributaire du matériel en tout état de cause,puisqu'il s'agit de faire un calcul.
00:22:46 :Plus vite ton processeur va calculer,forcément plus vite le cycle va être résolu.D'accord.Je vais te dire un exemple.Si tu as 10 000 variables à traiterdans la mémoire,tu comprends bien que sur un processeurqui tourne500 MHzet un processeur qui tourneen 4 GHz, celui qui fait
00:23:08 :4 GHz, les 10 000 variables,il va les traiter beaucoup plus vite.D'accord, oui.Merci.Non, pas de souci, allez-y.S'il y a d'autres questions, il ne faut pas hésiter.
00:23:20 :C'est vrai que le garbage collector,c'est un petit peu nébuleux, mais...Donc, hop.Là, je vous ai préparéun petit script rapidementpour qu'on puisse faire ça assez vite.
00:23:32 :Hop, là.Je modifie ça.Alors.Là, ici,il y a d'abord cette commande-là qui est intéressante.SetDebugTrue.Je vous explique ce que fait rapidementle script, ce n'est pas le plus gros intérêt.
00:23:48 :Là, en fait,il y a une classe qui crée un lien.Dans la construction de la classe,on a le lien suivant et la valeurdu lien actuel.
00:23:58 :Et à chaque fois qu'on la crée, donc,il va rentrer ses valeurs.On crée un premier lien d'origine.Et là, ensuite, on lance une bouclesur 5 millions d'itérationspour mettre dans une listedes liens qui seront créés en ayantpour référence le lien d'avant, et ainsi de suite.
00:24:14 :On va dire que ça simule un petit peuces premiers liens du garbage collector.Ce qui fait que plus on va avancerdans la boucle,vous voyez, il va vite arriver à avoirrépartis dans les différentes générations5 millions de référencesde variables qui vont être pointéesà gérer.
00:24:32 :Vous allez voir, il fait ça très très bien.Alors la première chose que je vaisvous montrer, c'est le GC SetDebugTrue.Par défaut,il est à false, mais vous pouvez soit le mettretrue, soit le mettre false ici dans votre script.
00:24:44 :Là, quand on le met à true, qu'est-ce qu'il se passe ?Vous voyez là, tout ce quiapparaît en rouge dans leterminal, c'est le garbage collectorqui est en train de travailler.
00:24:54 :Il est en train de faire toutes les opérations que je lui ai demandéessur les 5 millions de boucles, etil est en train de fairetous les calculs.
00:25:02 :Donc là,vous voyez,il nous metqui s'occupe de la génération0. Les objetsdans chaque génération, il y en a 702en génération 0, 701 en génération 1et 3 millions57 millions en génération 690.
00:25:24 :Dans la génération permanente,il y a encore une autre génération à part, il y en a 375.Aucune ne sontinatteignables, aucune ne sontpas collectables. Il a 1 000 secondes pour faire ça
00:25:36 :et il continue son cycle d'après.D'accord ?Donc maintenant,ce qui peut devenir un peu plus intéressant...La génération permanente,c'est quoi ?C'est vraiment quand vous avez des variablesqui ont fait tous les cycles génération 0, génération 1,génération 2. Là,
00:25:54 :c'est des variables qu'il va mettre en une génération à partet il va pluss'en occuper jusqu'à la fin du script.D'accord. Parce qu'en fin de compte,
00:26:02 :si tu veux,l'intérêt du garbage collector, c'est justementd'éviter de garder en mémoire desvariables ou des valeurs qui ontune durée de vie courte.
00:26:12 :Je vais prendre un exemplebête, mais par exemple, dans une boucle,tu as créé une variable pourstocker temporairementta valeur, le temps de la traiter dans ta boucle.
00:26:22 :Ça, c'estuniquement des variables qui ont une durée de vie très courte.Donc il y a totalement une machine qui resteen mémoire pendant des heures et des heures.
00:26:30 :Elle s'occupe de l'espace mémoirepour rien. Donc c'est là que le garbage collectorva remplir son rôle essentiel,parce que lui, il va craquer ces variablesjustement et les supprimer.
00:26:40 :Quand tu vas avoir fait tous ces cycles,donc je vous ai dit tout à l'heure,on arrive à 70 000 cyclesavant qu'on ait fait10 fois sur une génération de cycles.
00:26:50 :Là,il considère qu'à partir du moment où une variablea survécu pendant 70 000 cycles,il n'y a pas de chancequ'elle soit effacée au final avant la fin du script.
00:27:00 :Du coup, il la met dans une génération permanente,ce qui fait qu'il sait quecelle-là, c'est plus à peine son écupé.Elle sera nettoyée à la fin du script et on n'en parle plus.
00:27:08 :D'accord.Excellent.Donc c'est vraiment de la gestionciblée de mémoire,en fait. Il est vraiment sur de la gestion de mémoire.Maintenant,ce qu'on peut faire avec ça,alors je vais vérifier que ça fonctionne bienaussi.
00:27:30 :Ouais, c'est bon.Ça a marché.On va recommander notre setDevPro.Voilà.Et là, on va définir nos cycles.Donc là, j'ai mis des cyclesde 20 000 pour la génération 0,50 pour la génération 1et 100 pour la génération 2.
00:27:50 :Quel va être l'effet de ça ?Eh bien, je vais commenter ça.Avant, je vais faire comme çaparce que sinon, vous n'allez pas bien vous rendre compte.
00:28:00 :Pour moi, je fais un peu vite.Là, je vais juste lancer le script,donc sans le debug.Voilà.Il a mis 1 seconde 57à se réaliser.
00:28:12 :Maintenant,si je modifie la manièrede mon garbage collector, je vais gérer ma mémoire.Comme je vous l'ai marqué là.20 000 en génération 0,50 en génération 1 et 100 en génération 2.
00:28:24 :Qu'est-ce qu'il se passe ?Là, j'ai déjà diminué de moitiémon temps d'exécution.Donc, en jouant sur les valeursdu garbage collector,vous pouvez potentiellement augmenterla rapidité d'exécution de votre script.
00:28:38 :Et vous pouvez même allerencore plus loinen utilisant la commande visible.Donc là, cette commande va avoir pour effetde complètement désactiver le garbage collector.
00:28:48 :C'est-à-dire que là, il ne s'occupe plus de savoirs'il y a des variables qui sont encore utilisées ou pasou quoi.Le script fonce tout de suite.
00:28:56 :Et là, vous allez voir le résultat.On a regagné encore0,2 seconded'exécution.Alors là, sur ces temps comme ça, ça ne paraît pas énorme.
00:29:06 :Mais sur des gros, gros traitements, ça peut valoir le coup.Alors, le désactivercomplètement, c'est la solutionla plus rapide. Maintenant,ça veut dire qu'il faut avoir une RAM conséquenteet suffisamment vélocepour gérer l'ensemble de nos données.
00:29:22 :Le fait de joueravec les valeurs dutrezor, donc des cycles de génération,c'est une solution qui peut déjà être un peu plus intéressante.Parce que vous allez maintenirla fonction de garbage collectorde votre script, ce qui fait que vous n'allez pasencombrer votre mémoire inutilement.
00:29:38 :Mais vous allez peut-être pouvoiréviter qu'il passe trop de tempsà gérer ça et qu'il fasse vraimentdes coupes que, de temps en temps,de sorte à ce que la mémoirene s'engorge pas, maisqu'il ne passe pas son temps à faire ça.
00:29:52 :C'est l'un des intérêtsprincipaux du garbage collector.Après, pour ce qui est du virtual collector,si vous voulez choisirla solution de désactiver,on peut très bien le faire.
00:30:06 :Vous avez par exemple cette classequi est ici,vous avez besoin parce qu'elle s'exécutetrès rapidement,tant pis pour la mémoire,vous acceptez le risque.
00:30:20 :Ce que vous pouvez faire après, pour le reste de votre script,tout simplement,puisque cette commande a forcémentson pendant,vous faites Enableet là vous réactivez le garbage collector.
00:30:32 :Ce qui fait qu'en fait,le garbage collector fera son travail une foisque cette partie de votre script s'est exécutée.Donc ça peut vous permettre de gagner un temps d'exécutionsur ces deux nouveaux scripts.
00:30:42 :Moi je sais que par exemple,j'avais fait un script sur du...Je vais peut-être parler chinois pour certains,parce que moi je suis dansl'analyse forensic de support,et j'avais fait un script pouranalyser du BTRFS,donc c'est un système de fichiers Linux.
00:30:58 :Notammenttout ce qui est mapage du disque,c'est-à-dire déterminer où sont les fichiers,à quel endroit, quelle est leur taille, ainsi de suite.C'est quelque chose qui est extrêmement chronophage.
00:31:08 :Donc là typiquement,dans le cadre de mon programme complet,je pourrais utiliser,désactiver mon garbage collectoravant cette phase, sachant quela somme de données n'est pas énorme,mais elle est longue à récupérer.
00:31:22 :Du coup, je dis à ma meuf,il va falloir tenir le coup.Et une fois que cette phase-là est faite,hop, je réactive mon garbage collector.
00:31:30 :Voilà un exemple d'utilisation,on va dire, très pratico-pratique.Donc voilà pour moi ce que j'avais à vous montrersur le garbage collector et puis le module GC.
00:31:44 :Je ne sais pas si vous avez des questions.Après, que ce soit sur le garbage collector ou autre chose,si vous avez d'autres petites questionsque vous voulez qu'on voie comme ça rapidement,il n'y a pas de soucis.
00:31:54 :Donc si je résume,l'entête de ton scriptforceles nombres de cyclesde 700 d'origineà 20 000, je crois, en entêtetout au début de ton script.
00:32:10 :Et on observe queon passe d'une seconde 5 à la moitié.C'est ça ? Alors en fait,là où je décroche,c'est qu'on imposed'en faire plus en génération 1.
00:32:26 :En fait,on impose d'en faire plus,quelle que soit la génération,mais on arrive à gagner du temps quand même.C'est pas évident comme ça,tu vois, quand je vais te l'avoir expliqué, c'est assez simple.
00:32:42 :Merci.En fait,ce qui se passe en génération 0,c'est la première valeurque j'ai modifiée, là elle a 20 000.Oui, parce que d'origine c'est 700et 10 000.
00:32:56 :En génération 0,il va vérifiersi la variable a encore des ias,auquel casil a transféré la génération 1,ou si elle est supprimée.
00:33:08 :Donc on est sur quelque chosede relativement simple.Si tu attends ça,si le cas de la variablea encore des ias,je te dirais que dans 80-90%des cas,les variablesque tu vas créer dans ton script vont survivreà un cycle de garbage collector.
00:33:28 :D'accord ?Il y en a très très peu qui vont ne pas survivre.Le problème qu'il y a, c'est quesur ton cyclede garbage collector, tu vas créerallez, je vais prendre des chiffres par hasard,je n'ai pas les valeurs en tête.
00:33:44 :Admettons que tu vas créer 5 variablessur un cyclede garbage collector.Donc, à chacun de ces cyclesde génération 0, il a 5 variablesà gérer.
00:33:56 :Donc, il n'y a plus de liensou il y a des liens ? Il n'y a plus de liens, je l'efface.Il y a des liens, je transfère en génération 1.
00:34:02 :D'accord ? Oui.Admettons quesur chaque cycle 0, tu as4 variablesqui sont effacées et une variable qui a toujours des liens.Admettons.Donc, à chaque cycle 0, il ne serait que 5 variables.
00:34:18 :Je rappelle.Si on reste sur les valeurs de base,au bout de 700 cycles,combien il y ade variables en génération 1 ?C'est des maths.
00:34:30 :Je vous fais faire des maths à cette heure-ci.Je ne suis pas gentil.Mais il en a éjecté 4, c'est ça ?À chaque cycle 0,on dit qu'il y en a 4 qui sont supprimées.
00:34:40 :Il n'y en a qu'une qui passe en génération 1.Donc, au bout de 700 cycles, il y en a700 en génération 1.D'accord ?
00:34:50 :Puisque génération 0,on est pris pour le parterre théorique,pour que tu comprennes quesur chaque cycle, il y a 5 variables à créer,que sur ces 5 variables, il n'y en a qu'unequi survit au cycle, et qu'elle esttransférée en génération 1.
00:35:04 :Donc, au bout de 700 cycles de génération 0,quand il va faire son premier cycle de génération 1,là, ce n'est plus 5 variablesqu'il a à traiter, mais 700.
00:35:12 :Et du coup, le faitd'avoir ces 700 variables à traiteravant de les passer en génération 2,ou de les supprimer,ça lui prend fatalement beaucoup plus de tempsque les 5 variables.
00:35:26 :Tu me suis toujours ?Ouah !Décidément non !Alors,j'ai essayé de reprendre,alors, je vais couperle PipeSharm et je vais reprendre la tablettepour essayerde faire quelque chose qui soit à peu prèstac.
00:35:48 :Voilà, on va reprendre ça.En espérant que la reconnectionse fasse bien.Oui, parfait.Alors,je vais essayer de refaire un truc à peu près.
00:36:04 :On va s'occuper que de la génération 1et de la génération 0,on ne va pas se compliquer avec la génération 2, d'accord ?Donc,sur ton premier cyclede génération 0,tu as 5 variables,ok ?
00:36:28 :4 ont été supprimées,donc celle-là, il les efface,la dernière qui reste,il la transfèredans la génération 1.Jusque-là, on est bon ?Ok.
00:36:44 :Ensuite, au deuxième cycle,même chose.5 variables,il en supprime 4, donc il en transfère une,et il supprimeles autres.Toujours bon ?Donc, quand on arrivepar défaut, je rappelle queon a700 cycles dans une génération 0,ici, fatalement,on s'est retrouvé avec700 variables.
00:37:14 :D'accord ?Il y a un problème, là.Pardon,Stila ?Non, je ne sais pas, pardon.Bon.Donc, Jean-Christophe,tu es toujours sur le truc ?
00:37:32 :Ok.Donc, tu imagines bien queje prends des temps au hasard,je n'ai pas vérifié, je ne m'attendais pas forcément à ce genre de question.
00:37:40 :Admettons que pour traiter 5 variablesdans son cycle,ça lui prend 5 millisecondes.Forcément, pour en traiter 700dans la génération 1,ça lui prend 700 millisecondes.
00:37:56 :Toujours bon pour tout le monde ?Oui, ok, oui.Alors, du coup, maintenant, on va revenir surl'exemple qu'on avait fait. Je vais supprimerquelques données qui ne sont plus nécessaires.
00:38:08 :Voilà.Voilà.Du coup, si je monte,comme je l'avais fait dans l'exemple,à 20...20 000,le cycle de génération 0est forcément ça.Vous avez perdu...
00:38:34 :Oui, on a l'écran noir, oui.C'est peut-être un problème de focus, en fait.Non, c'est juste un problèmede reprise.Voilà.Ça devrait revenir.Comme ça, ça devrait peut-être...
00:38:54 :Je n'en vois rien.Je vais devoir terminer peut-être son dessin.On va essayer de faire comme ça,en espérant que ça ira mieux.Ah, voilà.
00:39:10 :Hop, hop.Non, ça ne veut pas.Voilà.Donc,j'en étais où ?Oui, voilà.Si on met 20 000 cyclesen génération 0,d'accord,avant qu'on ait traité la génération 1,donc on va rester sur nos calculs,à la base, c'est 700 cycles.
00:39:42 :Ah oui, je viens de comprendre.On le retarde, en fait.Voilà.Je suis désolé, c'était ça.C'était surprendre, merci.Oui, on le retarde, en fait.
00:39:54 :Le switch vers la génération 1,il est plus tard,plus de temps au programme en lui-mêmeet moins de tempsau transfert vers la génération 1.
00:40:04 :Voilà.Qu'est-ce que je vois ?On met plus de temps avant de retraiterles données persistantes en génération 1.Et même chose en génération 2.
00:40:14 :Oui, oui.Donc, c'est tout l'intérêt de joueravec les trésorset les valeurs de génération.Ça va vous permettre.Après, ça va être un petit peu de tâtonnementavec le temps,mais vous allez pouvoir, en jouant avec ces valeurs-là,sur une partiede votre script,dire, tiens, pour cette partie-là,
00:40:38 :tu vas mettre la génération 1 à 20 000 ou 200 000,enfin, peu importe,c'est vous qui allez voir ce qui vous semble mieuxen termes de ratio gestion mémoire et gestion temps,et dire, tiens,mon script s'exécuteun petit peu plus vite et j'obtiens un gain de temps
00:40:52 :sur une opération un peu lourde.Et tout comme je vous ai montréavec le Disable Enable,vous pouvez très bien définir votre Resolveavant la partie lourde du scriptet le réinitialiser en mettant710 à l'issue de cette partie du script.
00:41:06 :Après, vous pouvez modifier ces valeurs à la voléequand vous voulez.Oui, oui, à la volée, carrément, oui.On peut même, depuis un petit tableau de bord qu'on ferait,on pourrait carrément joueravec des curseurs, pratiquement.
00:41:20 :Pratiquement, on pourrait mêmeimaginer, tu fais,alors pour ceux qui, je ne sais pas sivous avez vu ça, mais on pourrait par exemple imaginerun décorateurqui va en fonctionde chaque classe,de chaque fonction, vous allez mettrele décorateur en fonction de, mettons,très lent, lent,normal, vite, très vite, par exemple,
00:41:42 :on pourrait les appeler comme ça, ces décorateurs,et dans chacun de ces décorateurs, vousfixez le Resolve en fonction de l'effet voulu.D'accord.Excellent.Du coup,j'ai une question,on parlait de matériel tout à l'heure,dans le casoù on ferait une scrutationréseau versun automate programmable industriel,
00:42:06 :par exemple, est-ceque tu penses que le faitde,est-ce que tu penses qu'on peutoptimiser ou accélérer la scrutationen jouantjustement sur ces paramètres ?
00:42:20 :Alors, est-ce que ça interfère directementsur une crème qui va vers l'extérieurou ça reste uniquement internesi on fait des calculs en interne ?
00:42:28 :Ça reste interne, la machine.D'accord, ok.J'ai pas une grosse maîtrise dans le domaine que tu évoques,je t'avouerai, les automates,j'en ai vu un peu pendant mon bac età la foire, ça doit s'arrêter là,à peu près,donc je comprends pas, j'ai pas une grosse expériencedans le domaine,
00:42:46 :mais à mon sens,le garbage collector, il va vraimentavoir une influence sur l'exécutiondu PC en soi et surtoute machine, dès que tu commences à utiliserdu réseau, c'est fatalement tributairede la réponse de l'autremachine correspondante.
00:43:02 :Oui, oui, d'accord. Oui, oui, bien sûr.Ok,excellent.Et donc, j'imagine,pareil,donc là, si on oublie l'aspectextérieurqui est une communication,si on reste et qu'on a une interface graphique,là,cette fois-ci, on reste en localsur la machine avec sonGUI, quoi, son propre interfacegraphique, est-ce que t'as observé
00:43:30 :des différencesoupeu importe, ça n'impactepas la réactivitégraphique ?Non, ça ne va pas forcémentimpacter la réactivité graphique.Là où le module GCest intéressant,c'est pourvraiment les calculs, la gestionde mémoire en soi.
00:43:54 :La vitesse, la réactivité de toninterface graphique ne vont pas êtrenécessairement impactées par ça, puisqu'en finde compte, là, sur une interface graphique,oui, tu utilises de la mémoire vive forcémentpuisque toutes les données que tu crées, ainsi de suite,sont obligées de se stocker en mémoire à un moment donné,
00:44:08 :mais ce n'est pas vraiment...Là, on n'est plus vraiment sur de la questionde données, savoir si elle estéphémère ou persistante, ton interface graphique.
00:44:16 :Je dirais que toutes les données qui la composentvont forcément être plus ou moins persistantespuisqu'elles vont exister tout le temps que ton interfacegraphique existe. Là, on est
00:44:24 :vraiment sur le module GC, surla gestiondes variables et de leurs valeursassociées sur le tempsd'un calcul.Là, on rejoint des champs de domaine qu'on pourraittrouver, par exemple, avec les opérateurs, avec IELDet ainsi de suite. Là, on est vraiment sur du
00:44:40 :module qui est de la gestionassez fine de mémoire pour essayerd'optimiser son programme.OK, merci Stéphane, excellent.De rien.Excellent. J'adore la finessedu jeu, la précisionde la chose. Merci beaucoup.
00:44:57 :De rien, pas de souci.Est-ce qu'il y a d'autres questions ?Ou est-ce qu'il y en a qui sont en train de secasser la tête, dire « qu'est-ce qu'il nous a présentéce soir, ça fait bobo la tête ».
00:45:10 :Oh, ben, impeccable,c'est bon pour tout le monde.Si ce domaine-là vousintéresse, et dans le genrePetit Trick,si tout se passepour le mieux, je seraila semaine prochaine, vous présenter d'autres petits outilsqui gèrent aussila mémoire en Python.
00:45:40 :Je ne vais pas vous spoiler, je vais vouslaisser un petit peu la surprise, maisPython a encore d'autres petits outils comme ça, qui gèrent lamémoire, qui peuvent être assez intéressants de joueravec.
00:45:50 :Excellent, merci.Alors, j'aiun petit peu utilisé ce genred'outil, mais je me suisperdu il y a longtemps,il y a 5-6 ans,et en fait, il s'est avéréque l'applicationgrossissaiten mémoire, etc'était lors d'un test de communicationavec un automate, justement, et il s'estavéré, après les recherches,
00:46:16 :qu'il y avait un bugdans la librairie qui permetla communication, etdu coup,ça mettait en péril le projet.Donc, j'avais jouéun petit peu avec ça, maislà, jerecolle les morceaux, là.
00:46:34 :Tu comprends pourquoi ça buguait,en fait. Oui, oui,alors après, il aurait fallu reprendre lalibre de l'époque,quipeut-être bien était en Python 2.7
00:46:46 :à l'époque, doncil aurait fallu...Il aurait fallu la convertir en 3 poury avoir du collector.Oui, et puis,enfin, c'est un autre niveau, les gensqui ont écrit la libre,bon,c'est pas facile, quoi.
00:47:04 :Sinon, c'est écrit en C, doncil faut faire un petitpeu de C pour reprendre la librairie.Oui, oui, c'est compliqué,ouais.Super intéressant.Moi, je suis fande ce que tu vas présenter, donc tu spoiles pas,tu laisses la surprise.
00:47:22 :Vous aurez la surprise quand ça sera prêt.Ça sera quand ? La semaine prochaine ?Ouais, je pense que je vais faire ça la semaine prochaine,je vais me mettre dessus,et vu que le sujet a l'air d'intéresser du monde,on va poursuivre un petit peu,il y a encore des petits outils comme ça à vous présenter
00:47:36 :sur le sujet, surtout que là,on a quand même des gros sites plus gros,de la gestion de mémoire et du garbage collector,on va pouvoir s'amuser un petit peuplus avec ces outils.
00:47:46 :D'accord. En plus, c'est superintéressant parce que, si j'aibien compris,c'est un petit peulecomment lele côtépauvre de Pythonpar rapport à d'autres technos.
00:48:04 :Moi, j'avais suiviça de loin,l'aspect,il y avait l'aspect carbone,justement,ce qu'on vient de voir,et puis,ce qui manquait un peu à Python,c'est la gestion de processus,des choses comme ça,par rapport à Java,qui était plus développée.
00:48:28 :Mais c'est intéressant,c'est intéressantde voir comment tout ça, ça fonctionne.Tu vois, tout ça, c'est un petit peu géréentre là, ce qu'on vient de voir aujourd'hui,ce que je vous montrerai la semaine prochaine,et puis, vous verrez,si vous voulez aller voir sur le replay,la semaine dernière, j'ai fait une session,
00:48:46 :puis Gab en a fait une la semaine d'avant,sur le threading, du processing,il y a Syncio.Justement, on commence à gérer un peu plus finement,comment s'exécutent nos processus,qui fait quoi, qui attend qui, et ainsi de suite.
00:48:58 :Et,quand on met tout ça bout à bout, on se rend compte que,finalement,malgré quelques critiques,Python est extrêmement versatileet permet, justement,de gérer beaucoup, beaucoup de choses.
00:49:12 :Alors, certes, il n'y aura pas une gestionde la mémoire aussi finequ'on pourra retrouver dans le langage C, par exemple,mais,vous allez pouvoir, quand même,gérer beaucoup, beaucoup d'aspects,et surtout, vous allez pouvoir,comme je vous le disais, là, je reprends l'exemple dugarbage collector, dire, sur cette fonction,
00:49:30 :je veux que ça gère de cette manière-là,pour gagner du temps,je préfère remplir la mémoire plutôt que de perdre du temps,le nettoyage sera prêtpendant l'exécution d'autres tâchesmoins lourdes,et vous avez vraiment la possibilitéde gérer de A à Z votre truc.
00:49:46 :Oui, oui, c'est bien.Alors, je n'ai pas regardé encore le replay,parce que je suis sur 5 kios,il faut vraimentque je le fasse, parce que c'est quelque chosequi m'intéresse.
Aucune occurrence trouvée pour « ».