Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1701 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell Bash] Utilisation des semaphores pour paralleliser mon script

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Shell Bash] Utilisation des semaphores pour paralleliser mon script

n°2338436
pierre_4
Posté le 28-08-2019 à 22:27:11  profilanswer
 

Bonjour,
 
Je tente d'améliorer avec les sémaphores un script de traitement de photos qui fonctionne. Je suis sous GNU/Debian stable.
 
J'ai une fonction qui s'appelle travail qui prend en argument le nom d'une image, et la traite.
 
Actuellement, elle est appelée dans le même script à l'aide d'une boucle

Code :
  1. for i in *.png ; do
  2. travail $i &
  3. done


 
Le problème c'est que ça utilise beaucoup de mémoire s'il y a beaucoup de photos. Je voudrai donc utiliser les sémaphores pour limiter le nombre de photos traitées en même temps.
 
Le code

Code :
  1. for i in *.png ; do
  2. sem -j+0 travail $i
  3. done
  4. sem --wait


ne fonctionne pas.
 
J'ai le message d'erreur suivant /bin/bash: travail : commande introuvable
 
J'essaye alors d'ajouter

Code :
  1. export -f travail


juste après la définition de la fonction mais ça ne marche pas mieux :

Citation :

travail sur image 113_XT1S3739.png
convert-im6.q16: unable to open image `x': Aucun fichier ou dossier de ce type @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/560.
convert-im6.q16: invalid argument for option `-quality': -unsharp @ error/convert.c/ConvertImageCommand/2460.
composite-im6.q16: invalid argument for option `-quality': sortie/grand_format/ne_pas_publier_113_XT1S3739.jpg @ error/composite.c/CompositeImageCommand/1241.
travail sur image 113_XT1S3779.png
convert-im6.q16: unable to open image `x': Aucun fichier ou dossier de ce type @ error/blob.c/OpenBlob/2874.
convert-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/560.
convert-im6.q16: invalid argument for option `-quality': -unsharp @ error/convert.c/ConvertImageCommand/2460.
composite-im6.q16: invalid argument for option `-quality': sortie/grand_format/ne_pas_publier_113_XT1S3779.jpg @ error/composite.c/CompositeImageCommand/1241.
etc.


 
Pour information, voici le script

Code :
  1. # !/bin/bash
  2. # _____________________________ Paramètres
  3. T_WEB="1000"   # Taille maxi des images pour le web
  4. Q_WEB="100"   # Qualité des images pour le web (100 car il faut les réouvrir pour mettre le logo)
  5. #
  6. H_MOY="1795"   # Hauteur maxi des images pour impression ?x15
  7. L_MOY_11="1347"  # Largeur maxi des images pour impression 11x15
  8. L_MOY_10="1204"  # Largeur maxi des images pour impression 10x15
  9. Q_MOY="96"   # Qualité des images pour impression 10x15
  10. #
  11. Q_GRA="99"   # Qualité des grandes images
  12. #
  13. B_INT="0.1%"   # Taille de la bordure intérieure
  14. B_CEN="0.3%"   # Taille de la bordure intérieure
  15. B_EXT="4%"   # Taille de la bordure extérieure
  16. C_INT="white"   # Couleur de la bordure intérieure
  17. C_CEN="black"   # Couleur de la bordure intérieure
  18. C_EXT="white"   # Couleur de la bordure extérieure
  19. #
  20. # __________________________________________________________________
  21. #
  22. # Fonction principale
  23. #
  24. function travail
  25. {
  26. # Lecture du nom de fichier à traiter
  27. local f=$1
  28. echo 'travail sur image' $f
  29. # Récupération d'infos sur l'image en cours
  30. local LARG=`convert -quiet -ping $f -format "%w" info:`
  31. local HAUT=`convert -quiet -ping $f -format "%h" info:`
  32. local LARG=${LARG:0:4} # On ne conserve que les 4 premiers chiffres, le reste n'est pas bon
  33. local HAUT=${HAUT:0:4}
  34. local DECALE_X=$(($LARG/24))
  35. local DECALE_Y=$(($HAUT/22))
  36. #
  37. # Récupération du nom du fichier et de l'extension
  38. local nomfichier="${f%%.*}"
  39. #
  40. # Recuperation donnees EXIF (elles sont écrites dans un fichier temporaire)
  41. if [ -f "${nomfichier}.RAF" ]
  42. then
  43.  exiv2 -q ex ${nomfichier}.RAF
  44. fi
  45. if [ -f "${nomfichier}.NEF" ]
  46. then
  47.  exiv2 -q ex ${nomfichier}.NEF
  48. fi
  49. #
  50. # Ajout des bordures
  51. convert $f -quiet -bordercolor ${C_INT} -border ${B_INT}  -bordercolor ${C_CEN} -border ${B_CEN} -bordercolor ${C_EXT} -border ${B_EXT}x${B_EXT} -quality 01 /tmp/$f
  52. #
  53. # Création image WEB
  54. convert /tmp/$f -resize ${T_WEB}x${T_WEB} -quality ${Q_WEB} -unsharp 3 sortie/web/${nomfichier}_pour_internet.jpg
  55. if [ -f "${nomfichier}.NEF" ]
  56. then
  57.  mv ${nomfichier}.exv sortie/web/${nomfichier}_pour_internet.exv
  58.  exiv2 in sortie/web/${nomfichier}_pour_internet.jpg
  59.  exiftool -Orientation=1 -n sortie/web/${nomfichier}_pour_internet.jpg
  60.  rm sortie/web/${nomfichier}_pour_internet.jpg_original
  61. fi
  62. #
  63. # Ajout logo puis conversion en JPG
  64. composite -compose Over -geometry +$DECALE_X+$DECALE_Y -gravity SouthEast /home/pierre/Documents/Photo/baniere-logo/logo_800x600.png /tmp/$f -quality ${Q_GRA} sortie/grand_format/ne_pas_publier_${nomfichier}.jpg
  65. #
  66. if [ -f "${nomfichier}.NEF" ]
  67. then
  68.  mv sortie/web/${nomfichier}_pour_internet.exv sortie/grand_format/ne_pas_publier_${nomfichier}.exv
  69.  exiv2 in sortie/grand_format/ne_pas_publier_${nomfichier}.jpg
  70.  exiftool -Orientation=1 -n sortie/grand_format/ne_pas_publier_${nomfichier}.jpg
  71.  rm sortie/grand_format/ne_pas_publier_${nomfichier}.jpg_original
  72.  rm sortie/grand_format/ne_pas_publier_${nomfichier}.exv
  73. fi
  74. # Suppression des fichiers inutiles
  75. rm /tmp/$f
  76. if [ -f "${nomfichier}.RAF" ]
  77. then
  78.  rm ${nomfichier}.exv
  79. fi
  80. }
  81. #
  82. # _____________________________ Création des dossiers et préparation ___________________________________________
  83. if test -e sortie; then
  84. rm -rf sortie
  85. fi
  86. mkdir sortie
  87. mkdir sortie/web
  88. mkdir sortie/grand_format
  89. #
  90. # _____________________________ Appel de la fonction en parallèle sur toutes les images PNG
  91. #
  92. #
  93. for i in *.png ; do
  94.          travail $i &                                                                 
  95. done 
  96. wait
  97. #
  98. # _____________________________ Fin de la fonction ________________________________________________________
  99. #
  100. echo
  101. echo TERMINÉ


Message édité par pierre_4 le 28-08-2019 à 22:28:02

---------------
--
mood
Publicité
Posté le 28-08-2019 à 22:27:11  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Shell Bash] Utilisation des semaphores pour paralleliser mon script

 

Sujets relatifs
besoin d'aide Shell/bash svp[Shell Bash] Vérifier l'absence d'erreur sur équipement Cisco
shell bash edition de fichier besoin d'aideScript shell scripting bash/Linux
script shell bash[shell/bash] - commande via SSH et variables
[Shell/Bash] Compter nombre de fichiers dans un répertoireScript bash - Problème d'espace dans une variable RESOLU
ecrire un script shell avec bash[Shell/Bash] variable dans la commande sed
Plus de sujets relatifs à : [Shell Bash] Utilisation des semaphores pour paralleliser mon script


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR