Bonsoir à vous,

ça fait un moment que je tourne en rond là et je commence à grave fatiguer...

je suis en python3 et je veux travailler sur plusieurs milliers de fichiers (là, j'en ai 15 000 mais le but c'est de pouvoir aller plus loin).

je fais une truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
from pathlib import Path
import taglib
BigDico = {}
 
for Fichier in Path("Musiques").glob("**/*):
  if Fichier.suffix.lower() in ('.mp3', '.flac', '.wav'):
    MetaData = taglib.File(str(Fichier))
    BigDico[str(Fichier)] = MetaData
Sauf que arriver à ~ 1500 fichiers pouf, j'ai une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
OSError: [Errno 24] Too many open files
il m'a fallut pas mal de temps pour piger qu'il fallait faire :
histoire qu'il me foute la paix avec ça...

mais ce n'est pas pratique si je veux partager mon soft...
alors je peux toujours faire un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
old=$(ulimit -n)
ulimit -n 100000
...
ulimit -n $old
mais bon, c'est pas top...

de plus on voit la mémoire du soft qui grimpe...
ce que je pige pas trop, c'est pourquoi ça grimpe comme ça ?
car c'est pas le contenu du dictionnaire qui fait ça...

Du coup, quelle serait la meilleure méthode en python pour traiter une masse de fichier ?
j'ai essayé de passer par des QThreads (je fais du pyqt), des ThreadPoolExecutor... mais rien...

et ces erreurs sont très courantes sur le net (et le forum) mais hormis la commande ulimit je n'ai rien trouvé...
Des soucis de fichiers non fermes... et je n'ai pas l'impression d'ouvrir de fichier...

Merci et bonne nuit

Je suis sous Kubuntu avec python 3.6.3 et Qt5.10

EDIT : Le problème vient de taglib qui ouvre des fichiers et ne doit pas les refermer du coup...
j'essaie de le forcer à les fermer mais sans trop de succès...
et je viens de voir que la version dispo dans les dépôts est complètement dépassée.
J'arrive pas à installer la derniere version via le pip... erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
  src/taglib.cpp:1736:50: error: no matching function for call to ‘TagLib::FileRef::create(const Py_UNICODE*&)’                                                                    
       __pyx_t_6 = TagLib::FileRef::create(__pyx_t_5);                                                                                                                             
                                                    ^                                                                                                                              
  In file included from src/taglib.cpp:578:0:                                                                                                                                      
  /usr/include/taglib/fileref.h:273:18: note: candidate: static TagLib::File* TagLib::FileRef::create(TagLib::FileName, bool, TagLib::AudioProperties::ReadStyle)                  
       static File *create(FileName fileName,                                                                                                                                      
                    ^~~~~~                                                                                                                                                         
  /usr/include/taglib/fileref.h:273:18: note:   no known conversion for argument 1 from ‘const Py_UNICODE* {aka const wchar_t*}’ to ‘TagLib::FileName {aka const char*}’           
  error: command 'x86_64-linux-gnu-gcc' failed with exit status 1                                                                                                                  
 
  ----------------------------------------                                                                                                                                         
  Failed building wheel for pytaglib
Il semble que mutagen ne présente pas ce problème...