Too many open files
Python
Erreur courante
Explication
L'erreur `OSError: [Errno 24] Too many open files` survient quand le processus dépasse la **limite du système d'exploitation** sur le nombre de descripteurs de fichiers ouverts simultanément. La cause habituelle : des fichiers ou des connexions ouverts dans une boucle sans jamais être fermés.
```python
fichiers = []
for i in range(100000):
fichiers.append(open(f"f{i}.txt")) # jamais fermés → fuite de descripteurs
# OSError: [Errno 24] Too many open files
```
Causes courantes
- **Fichiers ouverts sans être fermés** (pas de `with`, pas de `close()`). - **Connexions réseau / sockets** non libérées. - **Fuite de descripteurs** dans une boucle longue. - **Limite système basse** (`ulimit -n`).
1. Utilisez with pour fermer automatiquement
for i in range(100000):
with open(f"f{i}.txt") as f: # ✅ fermé à la fin du bloc
traiter(f.read())
2. Réutilisez les connexions (pooling)
Pour les requêtes HTTP, une Session réutilise les connexions au lieu d'en ouvrir une par appel :
import requests
with requests.Session() as s:
for url in urls:
s.get(url)
3. Augmentez la limite si elle est légitimement atteinte
ulimit -n 4096 # Linux/macOS : relever la limite de descripteurs
Comment prevenir cette erreur
- **Ouvrez toujours avec `with`** pour garantir la fermeture.
- **Limitez la concurrence** et réutilisez les connexions (pools, sessions).
- Vérifiez `ulimit -n` sur les serveurs traitant beaucoup de fichiers/connexions.
- Référence : [docs.python.org — open](https://docs.python.org/fr/3/library/functions.html#open).
Besoin d'aide sur votre projet ?
Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.
Nous contacterQuestions frequentes
Comment savoir si j'ai une fuite de descripteurs ?
Si l'erreur apparaît après un long fonctionnement ou de nombreuses itérations, c'est une fuite : cherchez des `open(...)` ou des connexions sans `with`/`close`. Sous Linux, `lsof -p | wc -l` compte les descripteurs ouverts.
`with` ferme-t-il vraiment le fichier même en cas d'erreur ?
Oui : le bloc `with` garantit la fermeture du fichier à la sortie, qu'elle soit normale ou provoquée par une exception. C'est la raison principale de le préférer.