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 :
Sauf que arriver à ~ 1500 fichiers pouf, j'ai une erreur :
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
il m'a fallut pas mal de temps pour piger qu'il fallait faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part OSError: [Errno 24] Too many open files
histoire qu'il me foute la paix avec ça...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ulimit -n 1000000
mais ce n'est pas pratique si je veux partager mon soft...
alors je peux toujours faire un truc du genre :
mais bon, c'est pas top...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 old=$(ulimit -n) ulimit -n 100000 ... ulimit -n $old
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 :
Il semble que mutagen ne présente pas ce problème...
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
Partager