Forum Programmation.python barre de progression

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
23
sept.
2020

salut,
j'ai fait une fonction qui travaille sur un fichier de 19 lignes et un autre fichier de 77373.

Ma fonction fait appel à d'autres fonctions et d'autres sous fonctions et fait de nombreuses opérations sur ces lignes.

un test m'a permis de trouver que la premiere etape prend 22 minutes sur mon ordinateur et la deuxieme etape plus d'1h30.

Cest long et je voudrais faire tourner ces fonctions sur d'autres fichiers plus importants. Par conséquent je voudrais faire une barre de progression. Pour la partie graphique jai trouvé des trucs sur internet. Par contre,comment quantifier facilement la totalité des opérations que le programme effectue (afin de faire une incrémentation et un % de progression)?

merci

  • # estimer le travail puis le faire

    Posté par  . Évalué à 4 (+2/-0).

    soit tu fais au pif, tu met un . pour chaque ligne traitée,
    tu vois alors les . qui avancent, ca te montre que le script travail

    soit tu estimes le nombre de ligne (compter les lignes c'est rapide, en bash c'est wc -l fichier tu sais alors combien il y aura de ligne à traiter, tu fais ta regle de 3, et tu sais quand faire bouger le %, suffit alors de compter les lignes et de bouger le % toutes les X lignes.

    si tu as 100 lignes, c'est 1% a chaque ligne, si tu as 77373lignes, ce sera 1% toutes les 773lignes

    • [^] # Re: estimer le travail puis le faire

      Posté par  (site Web personnel) . Évalué à 3 (+1/-0).

      J'imagine que pour implémenter ça, il faudra peut-être modifier le code en profondeur. Si le code fait appel à d'autres fonctions et d'autres sous fonctions et fait de nombreuses opérations sur ces lignes, il faut pouvoir garder un compteur sur le nombre ligne traitées lors de l'appel aux sous routines.

      C'est le genre de fonctionnalité qui est beaucoup plus facile à mettre en place quand c'est pensé dès le début du programme, plutôt que de l'ajouter dans un code existant (si l'on veut garder un code propre). Une manière de faire est de passer par un Visiteur_(patron_de_conception) si l'on code en objet.

  • # Typer Progress Bar

    Posté par  . Évalué à 5 (+4/-0).

    J'utilise actuellement pour un projet le paquet Typer qui permet de créer facilement une interface en ligne de commande et dedans tu as typer.progressbar().

    Le tutoriel est ici https://typer.tiangolo.com/tutorial/progressbar/
    C'est très simple d'utilisation si tu utilises une boucle for. Tu peux aussi mettre à jour la barre manuellement.

    Ça donne un bon rendu, par défaut quelque chose comme ça :
    [############------------------------] 34% 00:08:16
    Et tu peux rajouter un label si tu veux.

    Si le fait de devoir importer tout le paquet juste pour avoir une barre de progression te gêne la doc de typer pointe vers un autre paquet qui ne fait que ça, tqdm (je ne peux pas te faire de retours, je ne l'ai pas essayé).

  • # rich

    Posté par  . Évalué à 4 (+4/-1).

    j'ai utilisé progressbar pendant assez longtemps mais maintenant j'utilise rich qui permet de faire plein de trucs joli en console (couleurs, tableaux, logging, …)

    Titre de l'image

  • # tqdm

    Posté par  . Évalué à 0 (+0/-1).

    Pour faire des barres super facilement pour des scripts j'utilise tqdm

    https://github.com/tqdm/tqdm

    aussi simple à utiliser que :

    for i in tqdm(range(10)):
        time.sleep(10)

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.